我正在Spring Boot 1.5.9中使用Hibernate 5.0.12.Final。我需要在其父实体上存储代码列表。这些代码在保留后应保持其顺序。
我的代码@Embeddable
遵循以下简单可嵌入的方式:
@Embeddable
public class ItemCode implements Serializable {
private static final long serialVersionUID = 1L;
@NotNull
@Size(min = 4, max = 10)
@Column(name = "[ITEM_CODE]",
length = 10,
nullable = false)
private String code;
public ItemCode() {
// Empty constructor required by JPA Specs
}
public ItemCode(String code) {
this.code = code;
}
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
}
该类的父级使用@ElementCollection
和@OrderColumn
通过以下方式进行引用:
@Entity
@Table(name = "[PARENT_ITEM]")
public class ParentItem extends BaseEntity {
// ... Many field declarations
@Embedded
@ElementCollection
@CollectionTable(name = "[PARENT_ITEM_CODE]",
joinColumns = @JoinColumn(name = "[PARENT_ITEM_CODE_ID]"),
foreignKey = @ForeignKey(name = "FK_PARENT_ITEM_CODE"))
@OrderColumn(name = "[SORT_ORDER]",
nullable = false)
private List<ItemCode> itemCodes = new ArrayList<>();
}
这几乎可以像我期望的那样工作,但是Hibernate在表PARENT_ITEM_CODE_ID
的{{1}}和SORT_ORDER
上创建了一个主键。我知道为什么Hibernate这样做,但是不幸的是,根据数据库团队的代码样式指南,它无法正确生成FK名称。我可以自己定义主键的名称吗?经过一番谷歌搜索后,我基本上找到了答案,那就是不可能在可嵌入类型上定义主键。