Java JPA, как связать экземпляр объекта со всеми экземплярами другого объекта? - PullRequest
0 голосов
/ 27 мая 2020

Я работаю со встроенной базой данных H2, в которой я использую отношение @OneToMany, чтобы связать экземпляр объекта (продукт) с несколькими экземплярами других объектов (поставщиков); это полезно, когда у меня есть c поставщиков определенного продукта. Однако сейчас я хочу связать всех поставщиков с каждым продуктом; Я не хочу создавать в своей таблице поставщиков разные записи поставщиков для каждого продукта, вместо этого я хочу иметь только 5 записей (5 поставщиков) в моей таблице поставщиков, которые связаны с каждым отдельным продуктом, это несколько слов, я хочу чего-то добиться например, «один ко всем», возможно ли это сделать с помощью аннотаций JPA?

Продукт

@Entity
public class Product {

    @Id
    private String productCode;

    @OneToMany
    @JoinColumn(name = "supplier_id", referencedColumnName = "productCode")
    private List<Supplier> suppliers;

}

Поставщик

@Entity
public class Supplier {

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

    private String name;
}

1 Ответ

0 голосов
/ 27 мая 2020

Однонаправленная @OneToMany ассоциация:

@Entity
public class Product {

    @Id
    // @Column(name = "id") maybe
    // @GeneratedValue maybe
    private String productCode;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) // according to your need
    private List<Supplier> suppliers;

    ...
}

И,

@Entity
public class Supplier {

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

    private String name;

    ...
}

@ManyToOne ассоциация:

@Entity
public class Product {

    @Id
    // @Column(name = "id") maybe
    // @GeneratedValue maybe
    private String productCode;

    ...
}

И,

@Entity
public class Supplier {

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

    @ManyToOne
    @JoinColumn(name = "product_id", foreignKey = @ForeignKey(name = "PRODUCT_ID_FK"))
    private Product product;

    private String name;

    ...
}
...