Java 将@ElementCollection映射到同一个表
我希望Hibernate只为我构建一个包含以下列的表:Java 将@ElementCollection映射到同一个表,java,hibernate,Java,Hibernate,我希望Hibernate只为我构建一个包含以下列的表: id | product_id | enum_id 1 1 1 2 1 2 即,每个产品可以有多个枚举。我不想引入新的链接表 所以我的问题是如何注释我的字段以实现这样的表结构 到目前为止,我拥有以下实体: @Entity public class Entity { @Id private Long id; @ManyToOne( fetch = FetchTy
id | product_id | enum_id
1 1 1
2 1 2
即,每个产品可以有多个枚举。我不想引入新的链接表
所以我的问题是如何注释我的字段以实现这样的表结构
到目前为止,我拥有以下实体:
@Entity
public class Entity {
@Id
private Long id;
@ManyToOne( fetch = FetchType.LAZY )
@JoinColumn( name = "product_id" )
private Product product;
@ElementCollection
@??? // what should go here?
private List<Enum> enums = new Arralist<>();
}
@实体
公共类实体{
@身份证
私人长id;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“产品标识”)
私人产品;
@元素集合
@这里应该放什么?
私有列表枚举=新的Arralist();
}
我可以看到,您将添加多个具有不同值的行,所以为什么不这样做:
@Entity
public class Entity {
@Id
private Long id;
@ManyToOne( fetch = FetchType.LAZY )
@JoinColumn( name = "product_id" )
private Product product;
@Enumerated(EnumType.STRING)
private Enum enum;
然后可以在多行中添加多个连接到product_id的枚举。如果您希望每个产品只有一个职位,您可以使用@StanislavL提到的方法:
@ElementCollection
@CollectionTable(name="the_table_name", joinColumns=@JoinColumn(name="product_id")) @Column(name="product_id")
private Enum enum;
您建议的表将为每个
实体
实例恰好包含一个产品和一个枚举。这与您的注释无关,而是一个实体将始终为每一行生成一个新实例,因为每一行都有自己的ID
如果您删除ID列,则给定的表已经是您的链接表,您只需对产品
实体进行注释:
@Entity
public class Product {
// ...
@ElementCollection
@Enumerated
private Set<MyEnum> enums;
}
像这个@CollectionTable(name=“the_table\u name”,joinColumns=@JoinColumn(name=“product\u id”))@Column(name=“product\u id”)?没有集合的
@ElementCollection
没有任何意义。在OP示例中,该表包含枚举
的序号,而不是字符串。
@ElementCollection
@Enumerated
@OrderColumn
private List<MyEnum> enums;