Hallo zusammen,
ich habe folgendes Problem:
Es gibt 3 Klassen: Team, Mitglied und die assoziative Klasse TeamMitgliedschaft.
Jedes Mitglied ist in maximal einem Team, zwischen Mitglied und TeamMitgliedschaft besteht also eine one-to-one Beziehung.
Jedes Team kann mehrere Mitglieder haben, zwischen Team und TeamMitgliedschaft betseht ale eine many-to-one Beziehung.
Mein Mapping sieht so aus:
Mitglied:
Code:
<one-to-one name="teamMitgliedschaft" property-ref="mitglied" cascade="delete" />
Team
Code:
<set name="teamMitgliedschaften" table="TeamMitgliedschaft" inverse="true" cascade="all">
<key column="team_id" not-null="true" foreign-key="fk_team" on-delete="cascade" />
<one-to-many class="TeamMitgliedschaft" />
</set>
TeamMitgliedschaft
Code:
<many-to-one name="team" column="team_id" foreign-key="fk_team" class="Team" not-null="true" />
<many-to-one name="mitglied" column="mitglied_id" foreign-key="fk_mitglied" class="Mitglied" not-null="true" />
Funktioniert auch alles soweit. Jetzt möchte ich aber für alle Objekte den 2nd-Level-Cache benutzen. Auch das funktionert problemlos bis auf eine Ausnahme: Das Laden der TeamMitgliedschaft eines Mitglieds führt zu folgender SQL-Abfrage:
Code:
select
teammitgliedschaft.team_id,
teammitgliedschaft.mitglied_id,
...weitere Attribute...
from
teammitgliedschaft
where
teammitgliedschaft.mitglied_id=?
Da mitglied_id nicht der primary key von TeamMitgliedschaft ist, kann hier der 2nd-Level Cache natürlich nicht verwendet werden.
Es ist aber doch bestimmt möglich, diese Struktur komplett über den 2nd-Level-Cache zu laden!?
Ist mein Mapping falsch? Müssen die Assoziationen anders gemappt werden?
Vielen Dank schon mal für Eure Mühen!
Grüße
Peter