首页 > 解决方案 > 如何在 JPA 中映射两个相同类型的实体

问题描述

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

这个想法是检查例如 ComputerPart1(motherboard_yy) 是否与 ComputerPart1(hardrive_xx) 兼容

所以我有一个名为 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>>

或者我是否创建另一个名为 Compatible 的实体?

我可能会选择的解决方案是拥有一个相同实体类型的列表:

@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 = "??")})

标签: jpaspring-data-jpamany-to-many

解决方案


推荐阅读