在 Hibernate 中创建列表

Create a list in Hibernate

我想创建以下 table:

ITEM_TABLE:

ID | TITLE | STORE1_TITLE | STORE1_PRICE | STORE2_TITLE | STORE2_PRICE

正如我们所见,这是一个包含 X 家商店的列表,应将其提取到单独的 table 中,如下所示:

ITEM_TABLE:

ID | TITLE

商店_ITEM_TABLE:

ITEM_ID | STORE_TITLE | PRICE

问题:我使用哪种方法通过 Hibernate 实现此目的?

我测试的内容:

@Entity
@Table(name = "ITEM_TABLE")
public class Item {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(name = "TITLE")
    private String title;

    @OneToMany(mappedBy = "STORE")
    private List<Store> stores;
}

下一个:

@Entity
@Table(name = "ITEM_STORE_TABLE")
public class Store {
    
    @ManyToOne
    @JoinColumn(name="ITEM_ID", nullable=false)
    private Item item;

    @Column(name = "STORE_TITLE")
    private String title;

    @Column(name = "PRICE")
    private double price;
}

这种方法的问题是 Hibernate 似乎不允许在没有 ID 的情况下创建 ITEM_STORE_TABLE。我看不出它有任何理由和 ID,因为它只是属于 ITEM_TABLE 中的行的列表,而不是那种意义上的实际商店。

我走的路对吗?或者我应该使用 @IdClass 并在 STORE_ITEM_TABLE 中使用多个键(感觉不对)?或者我应该使用@Embeddable 来处理列表?

欢迎任何反馈!

是的,您可以使用 @ElementCollection 将列表添加到表格中。但是因为这很慢,推荐的方法是使用参考 @Id 如下:

@Entity
@Table(name = "ITEM_STORE_TABLE")
public class Store {
    
    @Id
    @ManyToOne
    @JoinColumn(name="ITEM_ID", nullable=false)
    private Item item;

    @Column(name = "STORE_TITLE")
    private String title;

    @Column(name = "PRICE")
    private double price;
}