Java EntityManager在find挂起应用程序后保持
我正在使用JPA将一些数据持久化到一个表中。在持久化之前,我检查记录是否存在Java EntityManager在find挂起应用程序后保持,java,jpa,entitymanager,Java,Jpa,Entitymanager,我正在使用JPA将一些数据持久化到一个表中。在持久化之前,我检查记录是否存在 公共布尔保存(学生){ //em下面是EntityManager对象 Student record=em.find(Student.class,Student.getId()); if(记录!=null) 返回false; em.persist(学生); 返回true; } 此方法挂起em.persist(student)你能告诉我我做错了什么吗。试着按照下面的代码编写 公共学生保存(学生输入){ if(entry.
公共布尔保存(学生){
//em下面是EntityManager对象
Student record=em.find(Student.class,Student.getId());
if(记录!=null)
返回false;
em.persist(学生);
返回true;
}
此方法挂起em.persist(student)代码>你能告诉我我做错了什么吗。试着按照下面的代码编写
公共学生保存(学生输入){
if(entry.getId()==null){
//如果您没有id,它是新的,所以请坚持
em.persist(条目);
}否则{
//如果您有id,那么它是现有条目的更新,所以合并。
条目=em.merge(条目);
}
返回条目;
}
更新
刚刚意识到
您显然只想保存新条目,对吗?
换句话说,您不想保存/更新现有条目,是吗
公共布尔保存(学生){
Student record=em.find(Student.class,Student.getId());
if(记录!=null)
返回false;
em.persist(学生);//★ 如果您通过已设置id的条目,可以吗?
返回true;
}
您是否尝试将student.id
设置为空?尝试按以下方式编码
公共学生保存(学生输入){
if(entry.getId()==null){
//如果您没有id,它是新的,所以请坚持
em.persist(条目);
}否则{
//如果您有id,那么它是现有条目的更新,所以合并。
条目=em.merge(条目);
}
返回条目;
}
更新
刚刚意识到
您显然只想保存新条目,对吗?
换句话说,您不想保存/更新现有条目,是吗
公共布尔保存(学生){
Student record=em.find(Student.class,Student.getId());
if(记录!=null)
返回false;
em.persist(学生);//★ 如果您通过已设置id的条目,可以吗?
返回true;
}
您是否尝试将student.id
设置为null?当我在find()之后立即使用persist()时,锁没有任何问题。由于我的代码挂在em.persist()行上,我不知道是否存在锁问题或没有。。。更新了答案。是的,我不想更新。只创建新记录。是的,对象的Id已经设置好了。但是仍然挂起Persistent,您是否尝试将student.id设置为null?ヾ(๑╹◡╹)ノ“当我在find()之后立即persist()时,锁没有任何问题。因为我的代码挂在em行上。persist()我不知道锁是否有任何问题。更新了答案。是的,我不想更新。只创建新记录。是的,对象的Id已经设置。但是仍然挂在persist上。您是否尝试将student.Id设置为null?ヾ(๑╹◡╹)ノ"在问题中包含实体代码在问题中包含实体代码