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:

  1. Pourquoi est-il en donnant un pointeur null erreur?
  2. Qu'est-ce que l'utilisation de @PostPersist dans la réalité?
  3. 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
InformationsquelleAutor codingsplash | 2013-03-29