在 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;
}
我想创建以下 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;
}