Hibernate JPA链接表
我正在尝试创建一个链接表来链接父母/孩子,他们都属于同一类型(person)。我还试图创建一个链接表来链接球员和球队 在团队课程中,我有:Hibernate JPA链接表,hibernate,jakarta-ee,jpa,Hibernate,Jakarta Ee,Jpa,我正在尝试创建一个链接表来链接父母/孩子,他们都属于同一类型(person)。我还试图创建一个链接表来链接球员和球队 在团队课程中,我有: @OneToMany @JoinTable(name = "PLAYER_TEAM_LINK", joinColumns = { @JoinColumn(name = "TEAM_ID")}, inverseJoinColumns = { @JoinColumn(name = "PLAYER_ID")}
@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;
@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;
对于第二个场景,在我的Person类中,我有:
@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;
@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;
@ManyToMany(mappedBy=“children”)
私人名单父母;
@许多
@JoinTable(name=“PARENT\u CHILD\u LINK”,
连接柱=
@JoinColumn(name=“PARENT_ID”),
反向连接柱=
@JoinColumn(name=“CHILD\u ID”))
私人名单儿童;
基本上,我要做的是生成一个链接表,将父对象链接到子对象(因此父对象id和子对象id组合将是主键),并且父对象可以有多个子对象
然后,我尝试创建一个链接表来链接球队和球员(因此球员id和球队id组合将是主键)
我使用hibernate作为提供程序,并使用插件生成模式,但我找不到@ManyToOne、@ManyToMany等的正确组合来生成具有复合主键的链接表
任何帮助都将不胜感激。您的团队成员关联映射错误。通过两次声明这种独特的双向关联是如何映射的,你在重复自己:一次在团队中,一次在玩家中。使用
mappedBy
属性,一方(本例中为团队方)必须是相反的一方:
@OneToMany(mappedBy = "team")
private List<Player> players;
@OneToMany(mappedBy=“team”)
私人名单玩家;
其余的在我看来是正确的
我不明白为什么要使用联接表来映射这个双向多个。为什么不直接在播放器表中使用连接列?我个人非常喜欢这个页面: 它涵盖了许多关于JPA的不同主题。特别是,您可能会发现关于不同关系类型的部分非常有用:
对于每种关系类型,都给出了一些很好的例子。您能展示一下您的类,以及单元测试在做什么吗?您可能可以忽略“PERSON0_3;”,它只是由Hibernate生成的SQL别名……实际上我稍微改变了一下。你能帮我聊天吗?对不起,我出去的时候。。。但是如果你发布了codeso,我以后会看一看,所以我不需要列表中@OneToMany中的mappedBy声明?我喜欢你关于简单连接列的想法。我将如何实现这一点?只需删除
@JoinTable
注释并保留@manytone
和@OneToMany
注释即可满足您的需要。。。(应该会导致玩家有一个带有团队ID的列)实际上,由于您没有使用默认列命名,玩家将同时需要@ManyToOne
和@JoinColumn(name=“Team_ID”)