Hi,
I am having problem doing update operation. I did save, retrieve and delete but update is giving me trouble.Can someone please tell me what am doing wrong?
I am using Hibernate version: 3.0 and the database is Oracle 10g.
My hbm file is as follows:hibernate.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="Users" table="USERINFO">
<id name="ssn" column="SSN" >
<generator class="assigned"/>
</id>
<property name="name" column="NAME"/>
</class>
</hibernate-mapping>
My Code:
FirstExample.java
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class FirstExample {
public static void main(String args[])
{
Session session = null;
try{
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session=sessionFactory.openSession();
//Inserting Object state into the database.
//----------------------------------------
Users user1 = new Users();
user1.setSsn(29); //Autoboxing done here.
user1.setName("Ravi");
session.save(user1);
Users user2 = new Users();
user2.setSsn(2);
user2.setName("Arul");
session.save(user2);
session.flush();
//so that results apopear immediately in the database.
//Retrieving Object state from the database.
//-----------------------------------------
Users userobj = (Users)session.load(Users.class, user1.getSsn()); // Here user1.getSsn() is acting as the serializable object.
System.out.println(userobj.getSsn());
System.out.println(userobj.getName());
Users userobj2 = (Users)session.load(Users.class, user2.getSsn()); // Here user2.getSsn() is acting as the serializable object.
System.out.println(userobj2.getSsn());
System.out.println(userobj2.getName());
//Deleting object state from the database.
session.delete(user1); //Here am deleting the above saved user1 object.
session.flush();
//Updating object state in the database.
user2.setName("Rosh");
user2.setSsn(19);
session.update(user2);
session.flush();
}catch(Exception e){
e.printStackTrace();
}
}
}
Exception stack trace:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
29
Ravi
2
Arul
org.hibernate.HibernateException: identifier of an instance of Users altered from 2 to 19
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:51)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:82)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:190)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:70)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:675)
at FirstExample.main(FirstExample.java:46)
Thanks.
|