Hi all
Hibernate version: 3.1.3
Mapping documents:
Benutzer.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 01.05.2006 16:29:30 by Hibernate Tools 3.1.0.beta5 -->
<hibernate-mapping>
<class name="najsre7.model.Benutzer" table="TBENUTZER" schema="NAJSRE7_WEB">
<id name="id" type="java.lang.Integer">
<column name="ILAUFNUMMER" precision="9" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_TBENUTZER</param>
</generator>
</id>
<timestamp name="mutDatum" column="DMUTDAT" />
<many-to-one name="benutzerStatus" class="najsre7.model.BenutzerStatus" fetch="select">
<column name="FK_TBENUSTAT_ISTATUS" precision="9" scale="0" not-null="true" />
</many-to-one>
<property name="benutzerName" type="java.lang.String">
<column name="SBENUTZERNAME" length="50" not-null="true" />
</property>
<property name="passwort" type="java.lang.String">
<column name="SPASSWORT" length="50" not-null="true" />
</property>
<property name="eMail" type="java.lang.String">
<column name="SEMAIL" length="50" not-null="true" />
</property>
<property name="lastLogin" type="timestamp">
<column name="DLASTLOGIN" length="11" />
</property>
<property name="anzahlLogin" type="java.lang.Integer">
<column name="IANZLOGIN" precision="9" scale="0" not-null="true" />
</property>
<property name="mutUser" type="java.lang.String">
<column name="SMUTUSER" length="10" not-null="true" />
</property>
<property name="stvUser" type="java.lang.String">
<column name="SSTVUSER" length="10" />
</property>
<property name="personId" type="java.lang.Integer">
<column name="FK_TPER_IPERSNR" precision="9" scale="0" not-null="true" />
</property>
<set name="zugaenge" inverse="true">
<key>
<column name="FK_TBENU_ILAUFNR" precision="22" scale="0" />
</key>
<one-to-many class="najsre7.model.Zugang" />
</set>
<set name="profile" table="TBENU_PROFIL_MATRIX" fetch="join" >
<key column="FK_TBENU_ILAUFNR" />
<many-to-many column="FK_TPROFIL_ILAUFNR" class="najsre7.model.Profil" />
</set>
</class>
</hibernate-mapping>
Profil.hbm.xml
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 01.05.2006 16:29:30 by Hibernate Tools 3.1.0.beta5 -->
<hibernate-mapping>
<class name="najsre7.model.Profil" table="TPROFILE" schema="NAJSRE7_WEB">
<id name="id" type="java.lang.Integer">
<column name="ILAUFNUMMER" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_TPROFILE</param>
</generator>
</id>
<property name="profilTyp"
column="SPROFIL"
not-null="true"
type="najsre7.dao.hibernate.userType.immutable.benutzer.ProfilTypUT" />
<property name="beschreibung" type="java.lang.String">
<column name="SBESCHREIBUNG" length="200" />
</property>
<property name="mutUser" type="java.lang.String">
<column name="SMUTUSER" length="50" not-null="true" />
</property>
<property name="stvUser" type="java.lang.String">
<column name="SSTVUSER" length="50" />
</property>
<property name="mutDatum" type="timestamp">
<column name="DMUTDAT" length="11" not-null="true" />
</property>
<set name="benutzer" table="TBENU_PROFIL_MATRIX" fetch="join" inverse="true" >
<key column="FK_TPROFIL_ILAUFNR" />
<many-to-many column="FK_TBENU_ILAUFNR" class="najsre7.model.Benutzer" />
</set>
<set name="berechtigungen" table="TPROFIL_BERECHT_MATRIX" inverse="true" fetch="join" >
<key column="FK_TPROFIL_ILAUFNR" />
<many-to-many column="FK_TBERECHT_ILAUFNR" class="najsre7.model.Berechtigung" />
</set>
</class>
</hibernate-mapping>
Name and version of the database you are using: Oracle Express 10Spring version 1.2.7I have a many-to-many association between Benutzer and Profile. When i try to add a new Benutzer with an existing Profile an exception occurs. Here is my Manager-Code:
Code:
Benutzer ben = benutzerDao.saveBenutzer(benu);
Profil profil = getProfil(ProfilTyp.USER);
Set profileSet = ben.getProfile();
profileSet.add(profil);
ben.setProfile(profileSet);
Benutzer tmp = saveBenutzer(ben);
The following exception occurs:
Code:
Hibernate: insert into NAJSRE7_WEB.TBENUTZER (DMUTDAT, FK_TBENUSTAT_ISTATUS, SBENUTZERNAME, SPASSWORT, SEMAIL, DLASTLOGIN, IANZLOGIN, SMUTUSER, SSTVUSER, FK_TPER_IPERSNR, ILAUFNUMMER) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update NAJSRE7_WEB.TBENUTZER set DMUTDAT=?, FK_TBENUSTAT_ISTATUS=?, SBENUTZERNAME=?, SPASSWORT=?, SEMAIL=?, DLASTLOGIN=?, IANZLOGIN=?, SMUTUSER=?, SSTVUSER=?, FK_TPER_IPERSNR=? where ILAUFNUMMER=? and DMUTDAT=?
2006-05-05 11:35:46,335 ERROR Could not synchronize database state with session in (AbstractFlushingEventListener.java:300)
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [najsre7.model.Benutzer#100]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1635)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2208)
................................
I also tried the following code (only one save):
Code:
Profil profil = getProfil(ProfilTyp.USER);
Set profileSet = benu.getProfile();
profileSet.add(profil);
benu.setProfile(profileSet);
Benutzer ben = benutzerDao.saveBenutzer(benu);
Then I get an other exception, but at least i can see an insert operation into the join table:
Code:
Hibernate operation: Could not execute JDBC batch update; SQL [insert into TBENU_PROFIL_MATRIX (FK_TBENU_ILAUFNR, FK_TPROFIL_ILAUFNR) values (?, ?)]; ORA-02291: Integritäts-Constraint (NAJSRE7_WEB.FK_TBENU_PROFIL_MATRIX) verletzt - übergeordneter Schlüssel nicht gefunden ; nested exception is java.sql.BatchUpdateException: ORA-02291: Integritäts-Constraint (NAJSRE7_WEB.FK_TBENU_PROFIL_MATRIX) verletzt - übergeordneter Schlüssel nicht gefunden
any help appreciated! Thanks!
Kind Regards
Angela