Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA未持久化对象J2EE_Java_Jpa - Fatal编程技术网

Java JPA未持久化对象J2EE

Java JPA未持久化对象J2EE,java,jpa,Java,Jpa,我有一个使用JEE5的遗留应用程序,我添加了一个类“People”,并在数据库中添加了很多记录(People只有peopleid和字符串peopledesc) 如果我使用getAllPeople()方法正确填充列表,则所有数据都在那里 但是当我试图通过使用persistPeople(People-pep)的代码来持久化一个新记录时,它什么也做不了 system.out.println显示添加到对象的描述,以便将新创建的对象传递给方法,但它不会持久化到数据库中:( 控制台输出中未显示任何错误 Pe

我有一个使用JEE5的遗留应用程序,我添加了一个类“People”,并在数据库中添加了很多记录(People只有peopleid和字符串peopledesc)

如果我使用getAllPeople()方法正确填充列表,则所有数据都在那里

但是当我试图通过使用persistPeople(People-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>

org.hibernate.ejb.HibernatePersistence
实体、人

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

    }
PeopleDAOImPL.JAVA
导入javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.EntityTransaction;
导入javax.persistence.persistence;
导入javax.persistence.PersistenceContext;
导入javax.persistence.PersistenceUnit;
多米尼奥·雷诺瓦西翁进口公寓;
@无国籍
公共类PeopleDAOImpl实现PeopleDAO{
//EntityManagerFactory emf=Persistence.createEntityManagerFactory(“PersistenceUnit”);
@PersistenceUnit(unitName=“PersistenceUnit”)
私人实体管理工厂emf;
@凌驾
公众人物(pep){
EntityManager em=emf.createEntityManager();
System.out.println(“说明为:+pep.getDesc());
em.persist(pep);
}
@凌驾
公共列表getAllPeople(){
EntityManager em=emf.createEntityManager();
列表结果=新建ArrayList();
查询查询原则;
试一试{
queryPrincipal=em.createQuery(“从人员p中选择p”);
结果=queryPrincipal.getResultList();
返回结果;
}捕获(例外e){
System.out.println(results.size());
返回结果;
}最后{
如果(em!=null){
emf.close();
em.close();
}
}
}

在调用查询期间,您不必在事务中运行,当您尝试持久化/更新实体状态时,您必须在事务边界内运行该特定操作

在您的情况下,可以使用以下配置:

@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);


    }

感谢您的回答,我尝试了您的解决方案,但在调用EntityManager em=emf.createEntityManager()时出现了空指针异常;