Hallo zusammen,
ich habe folgendes Problem:
Ich habe eine Swing GUI gebaut und möchte in dieser eine Liste an Usern aus der Datenbank (Tabelle CNR_USER) ausgeben. Diese User können mehrere Rollen haben (Tabelle CNR_ROLE), sie sind verbunden über die Tabelle CNR_USER_ROLE, wo die user_id auf verschiedene role_id gemappt wird. In Java benutze ich nun hbm.xml Files zum Mappen auf die Tabellen. In der user.hbm.xml habe ich die Rollen nun eingebunden über
Code:
<set name="userRoles" table="CNR_USER_ROLE" lazy="false">
<key column="user_id" />
<many-to-many column="role_id" class="com.skidata.connector.db.hibernatemodel.Role" />
</set>
In der User.java dazu werden die Rollen folgendermassen gehandelt:
Code:
private Set<Role> userRoles = new HashSet<Role>(0);
public Set<Role> getUserRoles() {
return this.userRoles;
}
public void setUserRoles(Set<Role> userRoles) {
this.userRoles = userRoles;
}
Wenn ich nun einen User aufrufe und in Eclipse debugge, werden die Roles schon nicht ordentlich gelesen, schmeissen aber keine Exception, nur im Debug Fenster taucht die Meldung "com.sun.jdi.InvocationException occurred invoking method" auf.
Wenn ich nun Versuche direkt die Rollen für einen User aufzurufen, erhalte ich folgende Exception:
Code:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.skidata.connector.db.hibernatemodel.User.userRoles, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentSet.toString(PersistentSet.java:253)
at java.lang.String.valueOf(String.java:2615)
at java.lang.StringBuilder.append(StringBuilder.java:116)
at com.skidata.connector.db.hibernatemodel.generated.UserBase.getUserRoles(UserBase.java:128)
at com.skidata.connector.db.hibernatemodel.User.cloneUser(User.java:97)
Das ganze läuft auf einem JBoss 4.0, welcher auch die DB Connection regelt. Die Datenbank ist ein MSSQL Server 2000.
Hat jemand eine Ahnung, woran es liegen könnte, kann ich vielleicht ähnlich einer Webanwendung auch in einer GUI so etwas wie OpenSessionInView oder so nutzen ? Oder reicht vielleicht schon eine Anpassung im hbm.xml File oder ähnliches ?
Bin für alle Ideen und Ratschläge dankbar !
Grüße
vom Sascha