Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将@ElementCollection映射到同一个表_Java_Hibernate - Fatal编程技术网

Java 将@ElementCollection映射到同一个表

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

我希望Hibernate只为我构建一个包含以下列的表:

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;