2017-05-30 96 views
0

我有使用JEE5遺留的應用程序,我在數據庫中添加一個類「人物」,並加上「手」了很多紀錄(人只具有的peopleid和一個字符串peopledesc)JPA不是持久的對象J2EE

如果我使用的方法getAllPeople()我得到的名單無誤,每一個數據是有

但是當我嘗試通過代碼使用persistPeople堅持一個新的紀錄(人民PEP)這只是什麼都不做

的system.out.println顯示添加到對象的描述,以便將新創建的對象傳遞給方法,但它不會保留在數據庫中:(

控制檯輸出中未顯示錯誤。

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(); 
      } 
     } 

    } 

回答

0

雖然查詢的調用過程中,你沒有義務在事務中運行時,當您嘗試持續/更新實體的狀態時,您必須使用i運行該特定操作交易邊界。

你的情況,你可以使用以下配置:

@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

謝謝你的答案,我想你的解決方案,但調用的EntityManager時,我得到一個空指針異常EM = emf.createEntityManager(); – Alexev