我正在尝试创建一个链接表来链接父母/孩子,两者都属于同一类型(人)。我还试图创建一个链接表,将玩家与团队联系起来。
在团队课程中,我有:
@OneToMany
@JoinTable(name = "PLAYER_TEAM_LINK",
joinColumns = {
@JoinColumn(name = "TEAM_ID")},
inverseJoinColumns = {
@JoinColumn(name = "PLAYER_ID")})
private List<Player> players;
在玩家类中,我有:
@ManyToOne
@JoinTable(name = "PLAYER_TEAM_LINK",
joinColumns = {
@JoinColumn(name = "PLAYER_ID")},
inverseJoinColumns = {
@JoinColumn(name = "TEAM_ID")})
private Team team;
对于第二种情况,在我的Person类中,我有:
@ManyToMany(mappedBy = "children")
private List<Person> parents;
@ManyToMany
@JoinTable(name = "PARENT_CHILD_LINK",
joinColumns =
@JoinColumn(name = "PARENT_ID"),
inverseJoinColumns =
@JoinColumn(name = "CHILD_ID"))
private List<Person> children;
所以基本上我要做的是生成一个链接表来将父级链接到子级(因此父级id和子级id组合将是主键),父级可以有多个子级。
然后,我正在尝试创建一个链接表来链接团队与玩家(因此玩家ID和团队ID组合将是主键)。
我正在使用hibernate作为提供程序并使用插件来执行模式生成,但我找不到@ManyToOne,@ ManyToMany等的正确组合来生成具有复合主键的链接表。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您的Team-Player关联映射不正确。你重复自己,通过声明这个独特的双向关联如何映射两次:一次在Team中,一次在Player中。一方(本案例中的团队方面)必须是使用mappedBy
属性的反面:
@OneToMany(mappedBy = "team")
private List<Player> players;
其余看起来对我来说是正确的。
我不明白你为什么要使用连接表来映射这个双向ManyToMany。为什么不简单地在Player表中使用连接列?
答案 1 :(得分:0)
我个人非常喜欢这个页面: http://en.wikibooks.org/wiki/Java_Persistence它涵盖了许多与JPA有关的不同主题。特别是,您可能会发现有关不同关系类型的部分很有用:
http://en.wikibooks.org/wiki/Java_Persistence/OneToOne http://en.wikibooks.org/wiki/Java_Persistence/ManyToOne http://en.wikibooks.org/wiki/Java_Persistence/OneToMany http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany http://en.wikibooks.org/wiki/Java_Persistence/Embeddables
对于每种关系类型,都有一些非常好的例子。