簡體   English   中英

Hibernate:單個表中的多個@ManyToMany關系

[英]Hibernate: multiple @ManyToMany relations in a single table

我有一個項目,其中Hibernate用於管理實體。 兩個表之間可以存在多個@ManyToMany關系。 所以基本上我有這樣的代碼:

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "movies_screenplay_authors",
        joinColumns = @JoinColumn(name = "movie_id", nullable = false, updatable = false),
        inverseJoinColumns = @JoinColumn(name = "staff_id", nullable = false, updatable = false))
private Set<Staff> screenplayAuthors = Sets.newHashSet();

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "movies_story_authors",
        joinColumns = @JoinColumn(name = "movie_id", nullable = false, updatable = false),
        inverseJoinColumns = @JoinColumn(name = "staff_id", nullable = false, updatable = false))
private Set<Staff> storyAuthors = Sets.newHashSet();

現在,我想將這些關系存儲在單個表中,並附加一些描述關系類型的列。 所以基本上,我想有這樣的東西(使用偽代碼):

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "movies_staff",
        joinColumns = @JoinColumn(name = "movie_id", nullable = false, updatable = false),
        inverseJoinColumns = @JoinColumn(name = "staff_id", nullable = false, updatable = false),
        joinCriteria = @JoinCriteria(columnName = "staff_type", value = StaffType.SCREENPLAY_AUTHOR, enumType = EnumType.STRING))
private Set<Staff> screenplayAuthors = Sets.newHashSet();

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "movies_staff",
        joinColumns = @JoinColumn(name = "movie_id", nullable = false, updatable = false),
        inverseJoinColumns = @JoinColumn(name = "staff_id", nullable = false, updatable = false),
        joinCriteria = @JoinCriteria(columnName = "staff_type", value = StaffType.STORY_AUTHOR, enumType = EnumType.STRING))
private Set<Staff> storyAuthors = Sets.newHashSet();

這在Hibernate或Java世界的任何地方都是可能的嗎?

您可以在每個@JoinTable注釋之后添加如下內容:

@Fetch(FetchMode.SUBSELECT)

這一切。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM