我正在制定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
似乎就像我们将列作为只读一样,属性是什么意思?为什么我们创建一个只读的列(没有插入和更新),你能举个例子吗?
答案 0 :(得分:1)
基本上,作者试图说的是,在父子关系的情况下,我们必须首先坚持孩子,然后将孩子关联到父母,然后坚持父母或让父母坚持孩子。这可以通过insertable=false, updateable=false
完成。
insertable=false, updateable=false
的含义是,创建/更新相关实体的责任不在子实体中。你有一个孩子和一个父母。您希望将insertable = false,updatable = false添加到与Parent实体中的Child实体的@OneToMany关系,仅仅因为它不是子实体创建或更新Parent的责任。反之亦然。