Instance ID has been changed from 1 to 2

What I'm trying to do is read a text file in the code and paste it into a table called employee1. And I get this error:

Hibernate: enter values ​​EMPLOYEE1 (NAME, SALARY, MANAGER, ID) (?,?,?,?) Instance identifier com.Employee changed from 1 to 2 Exception in thread "main" org.hibernate.HibernateException: instance identifier com. Employee changed from 1 to 2 when org.hibernate.event.def.DefaultFlushEntityEventListener.checkId (DefaultFlushEntityEventListener.java:51) in org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity (DefaultFlusherntava.name .def.AbstractFlushingEventListener.flushEntities (AbstractFlushingEventListener.java:190) in org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions (AbstractFlushingEventListener.java:70.70 ) at org.hibernate.impl.SessionImpl.flush (SessionImpl.java:669) in roseindia .tutorial.hibernate.FirstExample.main (FirstExample.java:98)

Employee.java Code

public class Employee { private int id; private String name; private double salary; private String manager; public int getId() { return id; } public void setId(int s) { id = s; } //***************************************************// public String getName() { return name; } public void setName(String s) { name = s; } //***************************************************// public double getSalary() { return salary; } public void setSalary(double s) { salary = s; } //***************************************************// public String getManager() { return manager; } public void setManager(String s) { manager = s; } } 

EmployeeEx.java (exect) code

 import java.io.File; import java.util.Scanner; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.Employee; public class EmployeeEx { public static void main(String[] args) { Session session = null; try { Transaction transaction = null; SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); session =sessionFactory.openSession(); Employee em = new Employee(); File f=new File("c:/Class/Employee1.txt") ; Scanner scan=new Scanner(f); transaction = session.beginTransaction(); while(scan.hasNext()) { String line=scan.nextLine(); String empArray[]=line.split(" "); em.setId(Integer.parseInt(empArray[0])); em.setName(empArray[1]); em.setSalary(Double.parseDouble(empArray[2])); em.setManager(empArray[3]); session.save(em); transaction.commit(); } } catch(Exception e) { System.out.println(e.getMessage()); } finally { session.flush(); session.close(); } } } 

Configuration file:

 <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> <property name="hibernate.connection.username">system</property> <property name="hibernate.connection.password">system</property> <property name="hibernate.connection.pool_size">10</property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.OracleDialect</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- Mapping files --> <mapping resource="contact.hbm.xml"/> <mapping resource="com.hbm.xml"/> </session-factory> </hibernate-configuration> 

Mapping file:

 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.Employee" table="EMPLOYEE1"> <id name="id" type="int" column="ID" > <generator class="assigned"/> </id> <property name="name"> <column name="NAME" /> </property> <property name="salary"> <column name="SALARY"/> </property> <property name="manager"> <column name="MANAGER"/> </property> </class> </hibernate-mapping> 
+6
source share
3 answers

In fact, you only have one instance of Employee , and you are repeating the same thing over and over ...

 Employee em = new Employee(); // Not a right place.. while(scan.hasNext()) { // Employee em = new Employee(); // Should be here... em.setId(Integer.parseInt(empArray[0])); em.setName(empArray[1]); em.setSalary(Double.parseDouble(empArray[2])); em.setManager(empArray[3]); .... } 
+9
source

change the id int field from your field and mapping file to long .

+1
source

Use Session.merge(Object) to replace Session.save(Object) .

0
source

Source: https://habr.com/ru/post/923134/


All Articles