JPA @PostPersist utilisation
J'ai une méthode persistData() qui persiste, un objet entité. J'ai une autre méthode findData() qui effectue find() de l'opération sur la même classe d'entité pour la valeur de la clé primaire qui a été conservée. Lorsque j'appelle le findData() dans le @PostPersist de la classe d'entité, j'obtiens une exception de pointeur null. Ce qui a soulevé quelques questions dans mon esprit:
- Pourquoi est-il en donnant un pointeur null erreur?
- Qu'est-ce que l'utilisation de @PostPersist dans la réalité?
- Quand un @Postpersist appelle en réalité? Après validation, au cours de validation ou avant de s'engager?
Toutes les autres idées serait également appréciée. Veuillez trouver le code et stacktrace ci-dessous:
public void persistData(){
EntityManagerFactory fac= Persistence.createEntityManagerFactory("test");
EntityManager man = fac.createEntityManager();
Employee e = new Employee();
e.setEmpId(500);
e.setEmpName("Emp5");
e.setSalary(5000);
man.getTransaction().begin();
man.persist(e);
man.getTransaction().commit();
man.close();
}
public void findData(){
EntityManagerFactory fac= Persistence.createEntityManagerFactory("test");
EntityManager man = fac.createEntityManager();
Employee e=man.find(Employee.class, 500);
System.out.println(e.getEmpName());
man.close();
}
@PostPersist
public void getData(){
new Service().findData();
}
Trace De La Pile ( Partielle ):
Exception in thread "main" javax.persistence.RollbackException: java.lang.NullPointerException
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60)
at Service.persistData(Service.java:18)
at Service.main(Service.java:34)
Caused by: java.lang.NullPointerException
at Service.findData(Service.java:28)
at Employee.getData(Employee.java:33)
Note: je suis en utilisant JPA 1.0
- post le postPersist méthode + stacktrace il va nous aider à vous aider
- la version de toplink utilisez-vous ?
- et où est la ligne: le Service.java:28
- Service:18 - l'homme.getTransaction.commit(); Service:28 -Système.out.println(e.getEmpName()); Employé:33 - new Service().findData() de @PostPersist
Vous devez vous connecter pour publier un commentaire.
Pour répondre à votre question 1:
(besoin du code et de la stacktrace)
Pour répondre à votre question 2:
L' @PostPersist indiquer une JPA méthode de rappel. Il vous permet de déclencher un code par le biais de l'entité du cycle de vie des événements.
Un exemple réel ?
Supposons que vous disposez d'une table Utilisateur et que vous souhaitez générer un e-mail de confirmation à chaque fois qu'un nouvel Utilisateur est conservé: vous pouvez le faire dans un PostPersist méthode.
Pour répondre à votre question 3:
La partie pertinente de specs sont en blod.
De JPA-2.0 spécifications: