JPA-更改主键的名称,该主键是使用@OrderColumn为@EntityCollection生成的

时间:2018-07-04 17:14:06

标签: java hibernate jpa

我正在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名称。我可以自己定义主键的名称吗?经过一番谷歌搜索后,我基本上找到了答案,那就是不可能在可嵌入类型上定义主键。

0 个答案:

没有答案