Java JPA中的两个实体之间可以有多个关系吗?

Java JPA中的两个实体之间可以有多个关系吗?,java,jakarta-ee,jpa,orm,openjpa,Java,Jakarta Ee,Jpa,Orm,Openjpa,例如,让我定义以下实体: @Entity public class Box{ @ManyToOne Apple apple; @ManyToOne Orange orange; } @Entity public class Apple { @OneToMany List<Box> boxes; @ManyToMany List<Orange> OrangeBoxMates; } @Entity

例如,让我定义以下实体:

@Entity
public class Box{

    @ManyToOne
    Apple apple;

    @ManyToOne
    Orange orange;

}

@Entity
public class Apple {

    @OneToMany
    List<Box> boxes;

    @ManyToMany
    List<Orange> OrangeBoxMates;
}


@Entity
public class Orange {

    @OneToMany
    List<Box> boxes;

    @ManyToMany
    List<Apple> appleBoxMates;

}
忽略许多注释被省略的事实。我只是以这段代码为例

现在我想在苹果和橙子之间创建一个额外的单向关系

@Entity
public class Apple {

    @OneToMany
    List<Box> boxes;

    @ManyToMany
    List<Orange> OrangeBoxMates;

    @ManyToMany
    List<Orange> OrangeFriends;
}


@Entity
public class Orange {

    @OneToMany
    List<Box> boxes;

    @ManyToMany
    List<Apple> appleBoxMates;


}

有什么理由我不能这样做吗?

我怀疑Hibernate能否分辨出Apple中的两个@manytoman关联之间的区别,因为您使用的是默认的联接列,并且这两个关联都是相同的。我想您可以将Apple关联自定义为Orange,以便将它们映射到数据库中不同的FK中的不同列。

不,没有理由。只要使用适当的注释和属性,一切都会好的。只是确认一下,我不能为连接列使用默认名称,因为默认名称是类名,并且会发生冲突。所以,如果我让连接列名显式和不同的lol,一切都会好起来?是的,一切都会好起来。根据我的记忆,这在OpenJPA中是有效的,没有自定义名称。然而,生成的SQL很奇怪——只有一个联接表,其中有两列用于oranges。不是很好的设计!当然,很容易用列注释修复。