2015-08-22 48 views
0

長話短說:JPA查詢結束與空值

  • Recipe包含

    @OneToMany(cascade = {CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "recipe") 
    private Set<RecipeRow> rows = new HashSet<>(); 
    
  • 包含:

    @ManyToOne(cascade = CascadeType.REFRESH)` 
    @JoinColumn(name = "recipe_id") 
    private Recipe recipe;` 
    
  • 的有擴展映射超樹結構(即它包含一個映射的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在錯誤消息不對應於任一我的食譜的行正被保存。這個鬼實體從哪裏來?
  • 所有必填字段在保存之前填入行中!
+0

它不允許'NULL'和你傳遞'NULL'到 –

+0

@SubodhJoshi嗯,這點任何列。我所有的實體在調試時都是有效的,但最終都是空值! – GGrec

+0

意思是你沒有給'NULL'並且被JPA添加爲默認值? –

回答

0

好的,所以這是一個初學者的錯誤,也是一個愚蠢的。

這些行有一個樹形結構,對吧?並且保存的集合包含所有這些元素,如扁平樹(即列表)。

問題是,頂行有抽象根作爲父(不是瞬態的),並且抽象根嘗試映射自己。

當然,我在調試時沒有注意到這一點,因爲我只是在查看行,在他們的必填字段,而不是在父級(這不是強制性的)。

是的...