在persist上,未从父级分配子ID

时间:2015-08-17 08:13:25

标签: java hibernate jpa

我正在制定Identity Sequencing策略并遇到以下声明

  

不会从父级继承子级ID。

     

一个常见问题是,生成的Id是通过OneToOne或ManyToOne映射的子对象的Id的一部分。在这种情况下,   因为JPA要求子项定义重复的Basic映射   对于Id,其Id将作为null插入。对此的一个解决方案是   将子项中Id映射上的列标记为insertable=false,   updateable=false,并使用法线定义OneToOne或ManyToOne   JoinColumn这将确保外键字段由填充   OneToOne或ManyToOne不是Basic。另一个选择是先   坚持父母,然后在坚持孩子之前调用flush()。

有人可以解释一下作者试图传达给我们的问题吗?

另外我看到insertable=false, updateable=false似乎就像我们将列作为只读一样,属性是什么意思?为什么我们创建一个只读的列(没有插入和更新),你能举个例子吗?

1 个答案:

答案 0 :(得分:1)

基本上,作者试图说的是,在父子关系的情况下,我们必须首先坚持孩子,然后将孩子关联到父母,然后坚持父母或让父母坚持孩子。这可以通过insertable=false, updateable=false完成。

insertable=false, updateable=false的含义是,创建/更新相关实体的责任不在子实体中。你有一个孩子和一个父母。您希望将insertable = false,updatable = false添加到与Parent实体中的Child实体的@OneToMany关系,仅仅因为它不是子实体创建或更新Parent的责任。反之亦然。