Code:
(...)
try {
net.sf.hibernate.Transaction tx = session.beginTransaction();
//INSERT
if (integrationImpl.getId() == 0) {
logger.info("generated id : "+session.save(integrationImpl));
} else
//UPDATE
session.update(integrationImpl);
tx.commit();
logger.info("insertIntegration completed");
return true;
} catch (Exception e) {
e.printStackTrace();
logger.error("insertIntegration failed");
return false;
}
Das ist ueberfluessiger Code, einfach session.saveOrUpdate(integrationImpl) verwenden und im Mapping fuer die <id> das unsaved-value="0" Attribut setzen (ist ja schon gemacht).
Sollte genau diese Sequenz...
Code:
Hibernate: select INTEGRATION_SEQ.nextval from dual
INFO (EditServiceBeanImpl.java:103) - generated id :126
Hibernate: insert into INTEGRATION (NAME, PROBLEM_DOMAIN, STATUS, VERSION, DESCRIPTION, DESCRIPTION_SHORT, OWNER, CONTACT, INSERT_DATE, INSERT_USER, UPDATE_DATE, UPDATE_USER, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
mit dem gleichen Treiber auf der gleichen Datenbank mit einfachen JDBC calls funktionieren, waere das sehr erstaunlich, denn genau das ist es was Hibernate ausfuehrt. Wenn du den Loglevel hochstellst siehst du zusaetzlich wie die Argumente an die ? gebunden werden. Genau so musst Du JDBC ausfuehren um das Problem zu isolieren, mit den gleichen Parametern und Argumenten.
Mit 99%iger Wahrscheinlichkeit liegt es am Treiber und du musst diesen austauschen, egal ob das geht oder nicht geht. So gehts ja offensichtlich auch nicht...