Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. Esta es la clase abstracta, la anotación @PersistenceContext venía en el ejemplo
  2. public abstract class AbstractJpaDao< T extends Serializable > {
  3. private Class< T > clazz;
  4.  
  5. @PersistenceContext
  6. @Qualifier("entityManager")
  7. EntityManager entityManager;
  8.  
  9. public void setClazz( Class< T > clazzToSet ) {
  10. this.clazz = clazzToSet;
  11. }
  12.  
  13. public T getById( Long id ){
  14. return entityManager.find( clazz, id );
  15. }
  16. ...
  17. }
  18.  
  19. Luego creo la clase Producto para el modelo de datos
  20. @Entity
  21. @Table(name="Producto")
  22. public class Producto implements Serializable {
  23.  
  24. @Id
  25. //@GeneratedValue(strategy=GenerationType.IDENTITY)
  26. private Long id;
  27.  
  28. @Column(name="nombre")
  29. private String nombre;
  30.  
  31. @Column(name="precio")
  32. private double precio;
  33. ...
  34. }
  35.  
  36.  
  37. y finalmente la clase que en que vamos a realizar las operaciones que hereda de AbstractJpaDao a la que se
  38. le debe inyectar en objeto EntityManager.
  39.  
  40. @Repository
  41. public class ProductoImpl extends AbstractJpaDao<Producto>
  42. {
  43. public ProductoImpl()
  44. {
  45. setClazz(Producto.class);
  46. }
  47.  
  48. public Producto findOne(long productoId) {
  49. return getById(productoId);
  50. }
  51. ...
  52. }
  53.  
  54.  
  55. El archivo de configuración para Spring es:
  56.  
  57. @Configuration
  58. @ComponentScan({"hibernatejpa.common","hibernatejpa.persistencia"})
  59. public class ConfiguracionSpring {
  60.  
  61. // private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistencia");
  62.  
  63. @Bean(name="entityManager")
  64. public EntityManager entityManager() {
  65. EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistencia");
  66. return emf.createEntityManager();
  67. }
  68. }
  69.  
  70. que carga del archivo persistence.xml que tengo en META-INF, el archivo es correcto porque si lo pruebo directamente
  71. sin pasar por creando el EntityManagerFactory y el EntityManager en un test funciona todo correcto.
  72.  
  73.  
  74. En un clase de pruebas en el main pruebo lo siguiente;
  75. public static void main(String[] args) {
  76. AnnotationConfigApplicationContext contexto = new AnnotationConfigApplicationContext(ConfiguracionSpring.class);
  77.  
  78. Producto producto1 = new Producto();
  79. producto1.setId(5L);
  80. producto1.setNombre("Martillo");
  81. producto1.setPrecio(300);
  82.  
  83. ProductoImpl creaProducto = new ProductoImpl();
  84. creaProducto.create(producto1);
  85. }
  86.  
  87.  
  88. Me lanza la excepción siguiente:
  89. Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productoImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available
  90.  
  91.  
  92. Pero ahora si en public abstract class AbstractJpaDao< T extends Serializable > cambio @PersistenceContext por @Autowired
  93. @Autowired
  94. @Qualifier("entityManager")
  95. EntityManager entityManager;
  96.  
  97. y cambio en la clase que hereda ProductoImpl la anotación @Repository por @Component("ProductoImpl")
  98. @Component("ProductoImpl")
  99. public class ProductoImpl extends AbstractJpaDao<Producto>
  100.  
  101.  
  102. El error ahora es el error es el siguiente
  103. java.lang.NullPointerException
  104. at hibernatejpa.common.AbstractJpaDao.save(AbstractJpaDao.java:39)
  105. at hibernatejpa.persistencia.ProductoImpl.create(ProductoImpl.java:54)
  106. at pruebas.PruebaProducto01.main(PruebaProducto01.java:30)
  107.  
  108.  
  109. es decir parece que inyecta el Bean pero null ya que llega hasta este punto que es dónde casca la cosa
  110. public void save( T entity ){
  111. entityManager.getTransaction().begin();
  112. entityManager.persist( entity );
  113. entityManager.getTransaction().commit();
  114. entityManager.close();
  115. }
  116.  
  117.  
  118. Si inserto el registro directamente sin usar las clases ni inyectar el Bean
  119. entonces funciona, por lo tanto descarto que sea del driver, ni del persistence.xml ni de la BD
  120.  
  121. public static void main(String[] args) {
  122. EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistencia");
  123. EntityManager manager = emf.createEntityManager();
  124.  
  125. Producto producto1 = new Producto();
  126. producto1.setId(5L);
  127. producto1.setNombre("Martillo");
  128. producto1.setPrecio(300);
  129.  
  130. manager.getTransaction().begin();
  131. manager.persist( producto1 );
  132. manager.getTransaction().commit();
  133. manager.close();
  134. }
  135.  
  136. No sé que errores estoy cometiendo, a ver si alguien me hecha una mano para crear e inyectar el bean.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement