
Alejandro Villegas Carvajal
PreguntaNo entendí muy bien como funciona el @Autowired de Spring

pepe Martin
<code>@SpringBootApplication public class PruebaExamenApplication implements ApplicationRunner { @Autowired public PersonaRepository personaRepository; public static void main(String[] args) { SpringApplication.run(PruebaExamenApplication.class, args); } @Override public void run(ApplicationArguments arg0) throws Exception { // TODO Auto-generated method stub System.out.println(personaRepository.findById(2L).getProfesion()); for (int i = 0; i < personaRepository.listaProfesiones().size(); i++) { System.out.println(personaRepository.listaProfesiones().get(i)); } for(Persona p : personaRepository.findAll()) { System.out.println(p.getNombre()+ " " +p.getProfesion()); } personaRepository.deleteAllInBatch(); personaRepository.deletePersona("Marketing"); Persona p = new Persona(3L, "54848788f", 27, "Jose" , "Marketing"); personaRepository.save(p); personaRepository.actualizaNif("77777777k", "48569515t"); personaRepository.actualizaNifyNombre("89857556j", "Rojo"); } }

pepe Martin
<code>@Transactional public interface PersonaRepository extends JpaRepository<Persona, Long> { @Query("Select p from Persona p where id = ?1") public Persona findById(Long id); @Query("Select p.profesion from Persona p") public List<Persona> listaProfesiones(); @Modifying @Transactional @Query("delete from Persona p where p.profesion = ?1") public void deletePersona(String profesion); @Modifying @Transactional @Query("update Persona p set p.nif = ?1 where p.nif = ?2") public void actualizaNif(String nifO, String nifD); @Modifying @Transactional @Query("update Persona p set p.nif = ?1, p.nombre = ?2 where p.nif = '5785693k'") public void actualizaNifyNombre(String nif, String nombre); }

pepe Martin
<code>@Entity @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Table(name = "carcel") public class Carcel { @Id @GeneratedValue private Integer idCarcel; private String Nombre; private String Ciudad; } @Entity @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Table(name = "condena") public class Condena { @Id @GeneratedValue private Integer idCondena; @Column(name = "nombreCondena") private String nombreCondena; @Column(name = "anyos") private Integer anyos; }

pepe Martin
<code>@Entity @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Table(name = "telefono") public class Telefono { @Id @GeneratedValue private Integer idTelefono; private Integer numeroTelefono; private String compañia; @ManyToOne @JoinColumn(name = "preso_id") private Preso preso; }

pepe Martin
<code>@Entity @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Table(name = "preso") public class Preso { @Id @GeneratedValue private Integer idPreso; private String Nombre; private String Apeliido; @ManyToOne @JoinColumn(name = "id") private Carcel idCarcel; @OneToMany(mappedBy = "preso") @Column(name = "telefonos") private List<Telefono> ListTelefono; @ManyToMany @JoinTable(name = "presoCondena", joinColumns = { @JoinColumn(name = "idPreso", referencedColumnName = "idPreso") }, inverseJoinColumns = { @JoinColumn(name = "idCondena", referencedColumnName = "idCondena") }) private List<Condena> condenas = new ArrayList<Condena>(); }

pepe Martin
<code><dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.12.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.16</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-5.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hbm2ddl.auto">update</property> <property name="hibernate.connection.url" jdbc:mysql://localhost:3306/accesodatos2017</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"></property> <property name="hibernate.connection.pool_size">10</property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="hibernate.current_session_context_class">thread</property> <!--Mapeo de todas las clases--> <mapping class="es.fempa.test.hibernate.Car" /> </session-factory> </hibernate-configuration> public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder() .configure("hibernate.cfg.xml").build(); Metadata metaData = new MetadataSources(standardRegistry).getMetadataBuilder().build(); sessionFactory = metaData.getSessionFactoryBuilder().build(); } catch (Throwable th) { System.err.println("Enitial SessionFactory creation failed" + th); throw new ExceptionInInitializerError(th); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } public class App { public static void main(String[] args) { SessionFactory sessFact = null; try { sessFact = HibernateUtil.getSessionFactory(); Session session = sessFact.getCurrentSession(); Transaction tr = session.beginTransaction(); //INSERTAR Y GUARDAR List<Condena> lista = new ArrayList<Condena>(); Condena con = new Condena(); con.setNombreCondena("Atraco"); con.setAnyos(10); // con.setIdCondena(7); lista.add(con); Carcel c = new Carcel(); c.setNombre("Otra"); c.setCiudad("Barcelona"); //c.setIdCarcel(8); Preso p = new Preso(); // p.setIdPreso(14); p.setNombre("Pepe"); p.setApeliido("Diaz"); p.setIdCarcel(c); p.setCondenas(lista); List<Telefono> listado = new ArrayList<Telefono>(); Telefono tel = new Telefono(); tel.setNumeroTelefono(648878959); tel.setCompañia("Vodafone"); listado.add(tel); p.setListTelefono(listado); session.save(con); session.save(c); session.save(p); session.save(tel); //MODO 1 DELETE Carcel car = new Carcel(); car.setIdCarcel(24); session.delete(car); //UPDATE 1 Carcel c = new Carcel(); c.setIdCarcel(16); c.setNombre("Carcel 1"); c.setCiudad("Asturias"); session.update(c); //UPDATE 2 MAS OPTIMA Carcel c = (Carcel)session.get(Carcel.class, 7); c.setNombre("CACACITY"); session.update(c); //SACAR TODOS LOS PRESOS CON SUS DATOS String allPresos = "select p from Preso p inner join p.idCarcel c" + " inner join p.ListTelefono inner join p.condenas co"; List<Preso> presoList = session.createQuery(allPresos).getResultList(); for (Preso preso : presoList) { System.out.println("ID: " + preso.getIdPreso()); System.out.println("Name: " + preso.getNombre()); System.out.println("Apellido: " + preso.getApeliido()); for (Condena co : preso.getCondenas()) { System.out.println("Condena: " + co.getNombreCondena() + ", " + co.getAnyos() + " años"); } for (Telefono tel : preso.getListTelefono()) System.out.println("telefono: " + tel.getNumeroTelefono()); System.out.println("Carcel: " + preso.getIdCarcel().getNombre() + " " + "Ciudad: " + preso.getIdCarcel().getCiudad()); } //MODO 2 DELETE Query borrarPreso10 = session.createQuery("delete Preso where idPreso = :idPreso"); borrarPreso10.setParameter("idPreso", 9); borrarPreso10.executeUpdate(); tr.commit(); sessFact.close(); } catch (Exception ex) { ex.getMessage(); } finally { sessFact.close(); } } } //Spring //Aplication.properties spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mysql://localhost:3306/accesodatos2017 spring.datasource.username=root spring.datasource.password= server.port=8787 <!--Para ver las querys en consola--> logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Alejandro Villegas Carvajal
He mirado este Link, y aún no me queda claro http://stackoverflow.com/questions/19414734/understanding-spring-autowired-usage