Java persist方法在尝试持久化新对象时提供PersistentObjectException
在我下面的代码中,我试图持久化新创建的Employee实例,它引发persistantobject异常:Java persist方法在尝试持久化新对象时提供PersistentObjectException,java,hibernate,persist,Java,Hibernate,Persist,在我下面的代码中,我试图持久化新创建的Employee实例,它引发persistantobject异常: public class abc { public static void main(String as[]) { Configuration cfg= new Configuration();System.out.println("--------------got cfg object-----------"); cfg = cfg.configu
public class abc
{
public static void main(String as[])
{
Configuration cfg= new Configuration();System.out.println("--------------got cfg object-----------");
cfg = cfg.configure("hibernate.cfg.xml");System.out.println("--------------hbm loaded into cfg-----------");
SessionFactory sf= cfg.buildSessionFactory();
Employee item3 = new Employee();
item3.setEid(420);
Session session = sf.openSession();
Employee item = (Employee) session.get(Employee.class, new Integer(12));
// item.setFname("myaim1");
// session.save(item);
// Integer a= (Integer)session.save(item3);
//session.persist(item3);
Transaction tx = session.beginTransaction();
session.persist(item3);
tx.commit();
session.close(); // end of first session, item is detached
}}
例外情况是:
-------------hbm loaded into cfg-----------
Hibernate: select employee0_.eid as eid0_0_, employee0_.first_name as first2_0_0_, employee0_.last_name as last3_0_0_, employee0_.email as email0_0_ from EMPLOYEE3 employee0_ where employee0_.eid=?
Exception in thread "main" org.hibernate.PersistentObjectException: detached entity passed to persist: Employee
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 abc.main(abc.java:23)
我使用的是hibernate core 4.3版。
出了什么问题?在这里使用
persist()
有什么特别的原因吗?
为什么不使用save()
大概是这样的:
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(item3);
session.getTransaction().commit();
最可能的错误是在
item3.setEid(420)行代码>。我猜您一定是在使用@Id
和@GeneratedValue
以及'SEQUENCE/IDENTITY/TABLE/AUTO'之一。如果是这样的话,您可以将这一行注释为try
如果你继续面对同样的问题,发布Employee
类将有助于进一步调试它。你能在Employee
类上显示@Id
属性的映射吗?我使用了一个save,它触发了一个insert-ahile提交。没关系。但persist保证了事务提交时的每个查询。所以我试着坚持,但它抛出了这个例外我在hbm文件中使用自动增量生成器,保存工作正常,不知道坚持出了什么问题。从理论上讲,它应该是有效的。@jayendrabhatt请发布Employee
类。顺便问一下,您是否尝试注释掉item3.setEid(420)代码>?@jayendrabhatt对于Employee类,如果您没有在Employee类上使用注释,请包含相关的hbm文件。另外,您测试的是哪个数据库?