Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA链接表_Hibernate_Jakarta Ee_Jpa - Fatal编程技术网

Hibernate JPA链接表

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")}

我正在尝试创建一个链接表来链接父母/孩子,他们都属于同一类型(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;
对于第二个场景,在我的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”)