[英]Detached entity passed to persisit
我是新来的冬眠。 我编写了一个包含四个文件的简单程序。 Employee.java是一个具有getters n setters的bean类。
的hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- property name="hbm2ddl.auto">update</property-->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="connection.url">dbUrl</property>
<property name="connection.username">uname</property>
<property name="connection.password">pass</property >
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<mapping resource="Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Employee.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="hibernate_prj.Employee" table="EMPLOYEE">
<meta attribute="class-description">
This class contains the employee detail.
</meta>
<id name="id" type="int" column="empid">
<generator class="native"/>
</id>
<property name="firstName" column="empname" type="string"/>
<property name="dept" column="empdept" type="string"/>
<property name="salary" column="empsal" type="int"/>
</class>
</hibernate-mapping>
StoreData.java
package hibernate_prj;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class StoreData {
public static void main(String[] args) {
Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml");
//creating seession factory object
@SuppressWarnings("deprecation")
SessionFactory factory=cfg.buildSessionFactory();
//creating session object
Session session=factory.openSession();
//creating transaction object
Transaction t=session.beginTransaction();
try{
Employee e1=new Employee();
e1.setId(115);
e1.setFirstName("sonoo");
e1.setDept("jaiswal");
e1.setSalary(100);
session.persist(e1);//persisting the object
t.commit();//transaction is commited
session.close();
}catch(Exception e)
{
System.out.println("E "+e.toString());
}
System.out.println("successfully saved");
}
}
我已经使用以下sql语句创建了表
create table employee (empid number(2,2),empname VARCHAR2(30), empdept varchar2(10), empsal number(5,2));
但是,当我运行该程序时,出现以下错误:
org.hibernate.PersistentObjectException:分离的实体传递给持久化:hibernate_prj.Employee
请帮我解决这个问题
您已将员工的ID设置为115,但也已对其进行配置以生成该ID。 现在,Hibernat认为该实体已经存在,因为它的id为!= null,但是它不在会话中……不喜欢这样。
只需删除此行
e1.setId(115);
应该解决问题。
在这种情况下,persist函数用于更新,此处您的实体不存在于数据库中,因此异常告诉您您正在尝试更新的对象在数据库中没有引用(未链接到数据库)数据库中的现有行)。 尝试删除ID分配,如果可以使用session.save(e1);
因此将分配ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.