JPA 查询以空值结束
JPA query ends up with null values
长话短说:
Recipe
包含
@OneToMany(cascade = {CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "recipe")
private Set<RecipeRow> rows = new HashSet<>();
Row
包含:
@ManyToOne(cascade = CascadeType.REFRESH)`
@JoinColumn(name = "recipe_id")
private Recipe recipe;`
Row
扩展了具有树结构的映射超类(即它包含一个相同类型的映射 parent
字段)
就在实体管理器合并(配方的)之前,所有行(及其信息)都在那里。当它合并时,它会抛出这个(它与行有关!!!):
Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "name" violates
not-null constraint Detail: Failing row contains (11, 2015-08-22 13:53:33.276,
304170813849900523, 0, null, null, null, null, null, null, 1000, null,
null, null, null, null, null, null, null, null).
这几乎是不可能的,因为所有必填字段都在那里。
此外,增加了 ID 序列(行 table),但数据库 (postgres) 中没有保留任何行。
我是不是漏掉了什么?
我的问题是不是太宽泛了?
编辑 1:
- 错误消息中的 JPA UID 不对应于我正在保存的任何食谱行。这个幽灵实体是从哪里来的?
- 所有必填字段在保存前填写在行中!
好吧,这是一个初学者的错误,也是一个愚蠢的错误。
这些行是树状结构,对吧?保存的集合包含所有这些,作为平面树(即列表)。
问题是最上面的行将抽象根作为父级(这不是瞬态的),并且抽象根试图映射自身。
当然我在调试时没有注意到这一点,因为我只查看行及其必填字段,而不是父项(这不是强制的)。
是的...
长话短说:
Recipe
包含@OneToMany(cascade = {CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "recipe") private Set<RecipeRow> rows = new HashSet<>();
Row
包含:@ManyToOne(cascade = CascadeType.REFRESH)` @JoinColumn(name = "recipe_id") private Recipe recipe;`
Row
扩展了具有树结构的映射超类(即它包含一个相同类型的映射parent
字段)
就在实体管理器合并(配方的)之前,所有行(及其信息)都在那里。当它合并时,它会抛出这个(它与行有关!!!):
Caused by: org.postgresql.util.PSQLException: ERROR: null value in column "name" violates
not-null constraint Detail: Failing row contains (11, 2015-08-22 13:53:33.276,
304170813849900523, 0, null, null, null, null, null, null, 1000, null,
null, null, null, null, null, null, null, null).
这几乎是不可能的,因为所有必填字段都在那里。
此外,增加了 ID 序列(行 table),但数据库 (postgres) 中没有保留任何行。
我是不是漏掉了什么? 我的问题是不是太宽泛了?
编辑 1:
- 错误消息中的 JPA UID 不对应于我正在保存的任何食谱行。这个幽灵实体是从哪里来的?
- 所有必填字段在保存前填写在行中!
好吧,这是一个初学者的错误,也是一个愚蠢的错误。
这些行是树状结构,对吧?保存的集合包含所有这些,作为平面树(即列表)。
问题是最上面的行将抽象根作为父级(这不是瞬态的),并且抽象根试图映射自身。
当然我在调试时没有注意到这一点,因为我只查看行及其必填字段,而不是父项(这不是强制的)。
是的...