JPA查询以空值

时间:2015-08-22 11:04:40

标签: java postgresql java-ee jpa ejb

长话短说:

  • 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序列增加了,但DB(postgres)中没有持久的行。

我在这里遗漏了什么吗? 我的问题太宽泛了吗?

编辑1:

  • 错误消息中的JPA UID与我正在保存的任何配方行都不对应。这鬼实体来自哪里?
  • 保存之前,所有必填字段都填入行中。

1 个答案:

答案 0 :(得分:0)

好吧,所以这是一个初学者的错误,也是一个愚蠢的错误。

行有树形结构,对吗?保存的集合包含所有这些集合,如平面树(即列表)。

问题是顶行的抽象根作为父(不是暂时的),抽象根试图映射自己。

当然我在调试中没有注意到这一点,因为我只查看行,并且只查看它们的必填字段,而不是父项(这不是必需的)。

是的...