当前位置: 首页 > 知识库问答 >
问题:

传递给persisit的独立实体

凤安然
2023-03-14

我刚开始冬眠。我写了一个简单的程序,其中有四个文件。受雇者java它是一个bean类,其中包含getter和setter。

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>

受雇者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>

存储ata.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));

但是当我运行这个程序时,我得到以下错误:

组织。冬眠PersistentObjectException:传递给persist的分离实体:hibernate\u prj。受雇者

请帮我解决这件事

共有2个答案

郎成龙
2023-03-14

persist函数用于更新在这种情况下,您的实体在数据库中不存在,因此异常情况告诉您,您正在尝试更新数据库中没有引用的对象(未链接到数据库中的现有行)。尝试删除id分配,如果ot工作,则使用会话。保存(e1) 以便分配ID。

曹旭东
2023-03-14

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

只需删除此行

e1.setId(115); 

应该可以解决问题。

 类似资料:
  • 问题内容: 我有2个实体:和。 。 问题出在我从数据库中获取accountRole并尝试保留我的。 至此,我刚刚创建了我的帐户,并且角色已经存在于db中。 仍然出现错误。 问题答案: 只需更换 与: 并允许合并级联: 因为合并会这样做: 如果您的实体是新实体,则与persist()相同。但是,如果您的实体已经存在,它将对其进行更新。

  • 我有如下雇员类 当我调用来persisting时,我会得到以下错误

  • 我在Tomcat 7.0.32服务器上运行Java7.0.11。 你知道吗?

  • 问题内容: 我对React和Redux非常陌生,我正在尝试将数据从一个组件传递到另一个组件。但它没有父子关系,并且彼此独立。谁能帮我做到这一点?下面是我的代码。 另一个文件是我想发送EmpNumber的位置, 问题答案: 好的,这是一个例子。我将假设您已经配置了所有Redux存储,即创建存储,rootReducer等…,因为这是一个单独的帖子。 因此,基本的想法是,当你想更新你的终极版商店状态你

  • JPA和Hibernate的新手,所以请耐心等待,因为我试图绘制一整张图片。所以我有两个具有双向关系的Java对象。员工类是拥有类,部门类是关系的反面。一个部门可以有许多员工,一个员工只能有一个部门。我分配了employee_id作为员工实体的主键,department_id作为部门实体的主键。我还想在员工类中使用department_id作为外键。 员工类 部门类 我用来生成两个对象并将它们保存

  • 我是Hibernate的新手,我需要帮助。 我有一个名为Kasa的表,它有3个属性-id、address和account\u id。在我的表中有12行。我想使用Hibernate对此进行映射,并使用Java添加新的映射,所以我这样做了: 我也有能手和二传手,但不需要复制。 现在我想在我的数据库中添加新行,如下所示: 我得到这样的错误:javax.persistence.PeristenceExce