org.hibernate.PersistentObjectException: detached entity passed to persist:

本文探讨了在使用Java Persistence API (JPA)进行实体持久化操作时遇到的PersistentObjectException异常。主要原因是实体类中未正确配置主键生成策略,导致尝试插入已设置ID的记录时引发错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.itcast.jpa;

import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import com.itcast.jpa.domain.User;

public class BaseTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  User user = new User();
  user.setId(1);
  user.setName("zhangsan");
  user.setBirthday(new Date());
  addUser(user);
 }
 static void addUser(User user) {
  EntityManager emf = null;
  EntityTransaction tr = null;
  try {
   emf = JpaUtil.getEntityManager();
   tr= emf.getTransaction();
   tr.begin();
   emf.persist(user);
   tr.commit();
  }finally {
   if(emf !=null) {
    emf.close();
   }
  }
 }
}

 

 

 

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.itcast.jpa.domain.User
 at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
 at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
 at com.itcast.jpa.BaseTest.addUser(BaseTest.java:29)
 at com.itcast.jpa.BaseTest.main(BaseTest.java:20)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: com.itcast.jpa.domain.User
 at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
 at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
 at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
 at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
 at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
 at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
解决如下:因为在实体类中并没有设置主键增长方式而JPA默认的又是自动增长

所以插入的时候设置ID的话就会出现这个错误

 

在网上还有人说 @Id写错也会导致类似错误

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值