I understand saveOrUpdate had been asked before in the forum. I still couldn't get it to work after days of frustration.
Mapping file was generated by Middlegen. Did adjustment to it by adding not-null="true". Hoping that it would solved the problem. Also added unsaved-value="undefined" to id.
Hibernate version:
2.16
Mapping documents:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin
http://boss.bekk.no/boss/middlegen/
http://hibernate.sourceforge.net/
-->
<class
name="igts.server.database.etClasses.Admin"
table="admin"
>
<meta attribute="class-description" inherit="false">
@hibernate.class
table="admin"
</meta>
<id
name="adminNric"
type="java.lang.String"
column="admin_NRIC"
unsaved-value="undefined"
>
<meta attribute="field-description">
@hibernate.id
generator-class="assigned"
type="java.lang.String"
column="admin_NRIC"
not-null="true"
unsaved-value="undefined"
</meta>
<generator class="assigned" />
</id>
<property
name="strAdminName"
type="java.lang.String"
column="str_admin_name"
not-null="true"
length="50"
>
<meta attribute="field-description">
@hibernate.property
column="str_admin_name"
not-null="true"
length="50"
</meta>
</property>
<property
name="strPassword"
type="java.lang.String"
column="str_password"
not-null="true"
length="50"
>
<meta attribute="field-description">
@hibernate.property
column="str_password"
not-null="true"
length="50"
</meta>
</property>
<!-- associations -->
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
try
{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
session.saveOrUpdate(obj);
tx.commit();
}
catch (HibernateException he )
{
logger.fatal("Close Session Error");
}
finally
{
try
{
session.close();
}
catch(HibernateException e)
{
logger.fatal("Close Session Error");
}
}
Full stack trace of any exception that occurs:
ERROR net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2379) : Could not synchronize database state with session
net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)
at net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:25)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:684)
at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:642)
at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:52)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2418)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2372)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2240)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at igts.server.database.impl.hibernate.HibernateManager.save(HibernateManager.java:448)
at igts.server.database.IOS_emulator.saveEmulation(IOS_emulator.java:237)
at igts.server.database.IOS_emulator.saveButtonActionPerformed(IOS_emulator.java:193)
at igts.server.database.IOS_emulator.access$1(IOS_emulator.java:190)
at igts.server.database.IOS_emulator$2.actionPerformed(IOS_emulator.java:100)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Name and version of the database you are using:
MySQL 4.0.18
The generated SQL (show_sql=true):
update admin set str_admin_name=?, str_password=? where admin_NRIC=?
Debug level Hibernate log excerpt: