如何在JPA中映射相同类型的两个实体

如何在JPA中映射相同类型的两个实体,jpa,spring-data-jpa,many-to-many,Jpa,Spring Data Jpa,Many To Many,我有一个案例,我需要在计算机硬件部件之间创建一个兼容性映射 其目的是检查ComputerPart1(主板)是否与ComputerPart1(硬盘)兼容 所以我有一个叫做ComputerPart的实体 @Entity public class ComputerPart { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false)

我有一个案例,我需要在计算机硬件部件之间创建一个兼容性映射

其目的是检查ComputerPart1(主板)是否与ComputerPart1(硬盘)兼容

所以我有一个叫做ComputerPart的实体

@Entity
public class ComputerPart {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false, unique = true)
    private String serialNumber;

    @Column(nullable = false)
    private String manufacturer;

    // getter and setters
我不确定下一步该怎么做

我是否使用列表创建computerParts的对象映射

Map<ComputerPart, List<ComputerPart>>

您可以按照建议使用
@ManyToMany
。联接表和列可以是您想要的任何内容。正如您所提到的(这是推荐的解决方案),您还可以使用
@OneToMany
创建第三实体兼容性和映射。关于避免
@manytomy
,请进一步查看:嗨,艾伦,谢谢你的回复。很高兴知道多对多不是首选。那么基本上每个实体(ComputerPart和ComputerPartCompatible)都有一个@OneToMany到另一个实体?
@Entity
    public class ComputerPart {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;

        @Column(nullable = false)
        private String name;

        @Column(nullable = false, unique = true)
        private String serialNumber;

        @Column(nullable = false)
        private String manufacturer;


        @Column(nullable = false)
        private String manufacturer;

       // What @Annotation to put here?
       //is it @ManyToMany ? 
       Set<ComputerPart> compatibles;
@ManyToMany(targetEntity = ComputerPart.class, fetch = FetchType.LAZY)
    @JoinTable(name = "??", joinColumns = {
        @JoinColumn(name = "??", referencedColumnName = "??")},
            inverseJoinColumns = {
                @JoinColumn(name = "??", referencedColumnName = "??")})