2017-05-30 1 views
0

persistierenden habe ich ein Vermächtnis app JEE5, füge ich eine Klasse „People“ und fügen Sie „von Hand“ in der Datenbank eine Menge von Datensätzen (nur Menschen hat Personen_Nr und einen String peopledesc)JPA kein Objekt J2EE

Wenn ich die Methode getAllPeople() verwende ich die Liste korrekt aufgefüllt bekomme, ist jedes Datum

dort aber wenn ich versuche, einen neuen Rekord von Code zu beharren persistPeople mit (People pep) Es tut einfach nichts

die system.out.println zeigt die dem Objekt hinzugefügte Beschreibung, so dass das neu erstellte Objekt an die Methode übergeben wird, aber nicht in der Datenbank beibehalten wird :(

In der Konsolenausgabe wird kein Fehler angezeigt.

People.java

@Entity 
public class People implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int idpeople; 

    private String desc; 

persistence.xml

<persistence-unit name="PersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>entities.People</class> 

......

PeopleDAOImPL.JAVA 

import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.EntityTransaction; 
import javax.persistence.Persistence; 
import javax.persistence.PersistenceContext; 
import javax.persistence.PersistenceUnit; 
import residencias.dominio.Renovacion; 


@Stateless 
public class PeopleDAOImpl implements PeopleDAO { 


    //EntityManagerFactory emf = Persistence.createEntityManagerFactory("PersistenceUnit"); 


    @PersistenceUnit(unitName="PersistenceUnit") 
    private EntityManagerFactory emf; 


    @Override 
    public void persistPeople(People pep) { 
     EntityManager em = emf.createEntityManager(); 

     System.out.println("description is :"+pep.getDesc()); 
     em.persist(pep); 


    } 


    @Override 
    public List<People> getAllPeople() { 



     EntityManager em = emf.createEntityManager(); 
     List<People> results = new ArrayList(); 
     Query queryPrincipal; 

     try { 


      queryPrincipal = em.createQuery("SELECT p FROM People p"); 




      results = queryPrincipal.getResultList(); 

      return results; 

     } catch (Exception e) { 
      System.out.println(results.size()); 
      return results; 

     } finally { 
      if (em != null) { 
       emf.close(); 
       em.close(); 
      } 
     } 

    } 

Antwort

0

Während beim Aufruf einer Abfrage, Sie sind nicht verpflichtet, Wenn Sie versuchen, den Status einer Entität beizubehalten oder zu aktualisieren, müssen Sie innerhalb einer Transaktion ausgeführt werden. Sie müssen diese bestimmte Aktion mit i ausführen n eine Transaktionsgrenze.

In Ihrem Fall Sie folgende Konfiguration verwenden:

@Stateless 
@TransactionManagement(TransactionManagementType.CONTAINER) 
public class PeopleDAOImpl implements PeopleDAO { 

    @PersistenceUnit(unitName="PersistenceUnit") 
    private EntityManagerFactory emf; 

    @Override 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void persistPeople(People pep) { 
     EntityManager em = emf.createEntityManager(); 

     System.out.println("description is :"+pep.getDesc()); 
     em.persist(pep); 


    } 
+0

Vielen Dank für die Antwort, habe ich versucht, Ihre Lösung, aber ich habe eine Null-Ausnahme-Zeiger, wenn EntityManager Aufruf em = emf.createEntityManager(); – Alexev