java - 传递到持久化的分离实体

标签 java spring hibernate

我是 hibernate 新手。我编写了一个简单的程序,其中有四个文件。 Employee.java 它是一个 bean 类,其中包含 getters n setters。

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: detached entity passed to persist: hibernate_prj.Employee

请帮我解决这个问题

最佳答案

您已设置员工 ID(为 115),但也将其配置为生成。现在 Hibernat 认为该实体已经被持久化,因为它有一个 id != null,但它不在 session 中......不喜欢这样。

只需删除此行

e1.setId(115); 

应该可以解决问题。

关于java - 传递到持久化的分离实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049569/

相关文章:

java - 如何计算java类文件中的所有运算符和操作数

java - Jar 没有为 Spring Boot 创建

java - 没有 persist() 指令的 JPA 持久实体

java - 使用注释在 hibernate 中动态地将 POJO 映射到表

hibernate - 为 Play 框架构建查询优化层的通用方法?

java - 如何在 Android Studio 中添加链接源文件夹?

java - 通过netbeans在tomcat服务器上部署应用

java - Android线性布局背景透明度

java - 如何在 Spring Tiles 2.2 + Spring 4 中重用 put-list-attributes 变量?

java - Spring Boot 数据库保留在其他计算机上