Posiadam relację m: n podobną do here, z tym że pewne informacje mają być powiązane z jednostką AuthorBook
. Sądzę więc, że w ogóle nie potrzebuję @JoinTable
i powinienem utworzyć class AuthorBook
składający się z jednego łącza do każdego z Author
i Book
oraz dodatkowych informacji, prawda?Jawna tabela dołączenia hibernacji
Próbowałem go jak
@Entity
public class AuthorBook {
@Id @ManyToOne Author author;
@Id @ManyToOne Book book;
@LobOrWhatever AdditionalInformation additionalInformation;
}
i wpadłem na problemy (nie pamiętam dokładnie już). Wprowadziłem więc @GeneratedId int id
i zmieniono odniesienia do @NaturalId
. Działa to głównie dobrze, ale zabawnie, to zmusza mnie, aby przekazać dołączone Author
i Book
do Session#byNaturalId
co nie ma dla mnie sensu (mam identyfikatory i encje powinny zostać pobrane razem). Próbowałem też
session.byNaturalId(AuthorBook.class)
.using("author.id", someAuthorId)
.using("book.id", someBookId)
.load();
ale odmówiono mi powiedzieć, że „author.id” ma naturalnego id (co jest rzeczywiście prawdą, jako naturalna id to „autor”, ale jego „id” działa równie dobrze).
Patrząc na sieć, uważam, że wszyscy używają identyfikatorów zamiast podmiotów w takim stole, więc zastanawiam się, czy próbuję czegoś niemożliwego ... (lub głupiego).