J'ai un schéma UML ma foi assez basique qui se résume à :
Member<-----possède------>MemberAccount<-----appartient----->Groups
j'ai mappé MemberAccount en tant que Component de Member et Groups en tant que Set dans ce Component. Jusque là tout va bien.
Mon problème est que quand je sauvegarde le tout je peux aisèment naviguer depuis un membre à ses différents groupes mais pas le contraire, je n'arrive pas à retrouver les comptes et encore moins les membres depuis les groupes, j'aimerai obtenir une relation totalement bi-directionnelle sans avoir à faire des requêtes dans ma base (avec des SQL queries). est ce possible?
voilà mes deux fichiers mapping :
1. Groups.hbm.xml
<set name="memberAccount" table="users_groups" lazy="true"
inverse="true" cascade="save-update">
<key column="group_id" />
<many-to-many class="src.users.Member" column="user_id"></many-to-many>
</set>
2. Member.hbm.xml
<component name="MemberAccount"
class="src.accounts.MemberAccount">
<property name="status" type="string" />
<property name="creationDate" type="date" update="false"/>
<set name="myGroups" table="users_groups" lazy="true">
<key column="user_id" />
<many-to-many class="src.groups.Group"
column="group_id">
</many-to-many>
</set>
</component>
j'obtiens ce message d'erreur si je désire sauvegarder :
[CascadingAction] cascading to saveOrUpdate: src.users.Member
Exception in thread "main" org.hibernate.HibernateException: instance not of expected entity type: src.users.Member
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassEntityPersister(AbstractEntityPersister.java:3301)
at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1311)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180)
at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:460)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:84)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:502)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:494)
at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:130)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:121)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at src.tests.HibernateTest.associateGroupMember(HibernateTest.java:118)
at src.tests.HibernateTest.scenario1(HibernateTest.java:39)
at src.tests.HibernateTest.main(HibernateTest.java:20)
|