2010-04-07 99 views
1

所有什麼Hibernate逆向工程產生是這樣的Hibernate的級聯

 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "column_id") 
    public Itinerary getColumnId() { 
     return this.columnId; 
    } 

我想這樣的場景:當會話刷新,首先建立孩子的得救,那麼父對象,根據FK約束。

當然,孩子需要先保存(自動!),因爲有FK限制。

你會告訴我:有一個CASCADE選項,但如何與JPA一起使用它?

我嘗試添加級聯是這樣的:

 
    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.PERSIST) 
    @JoinColumn(name = "column_id") 
    public Itinerary getColumnId() { 
     return this.columnId; 
    } 

不爲我工作。

請先告訴我:該指令應註明什麼以及如何使其工作。

我收到「無法添加或更新子行:外鍵約束失敗」異常。

事實上,我不想用手堅持一切!只構造一個對象,並堅持它!

要註釋什麼,使用什麼指令以及如何使用?

回答

1

嘗試把級聯註釋映射的父結束,像

@OneToMany(cascade = { CascadeType.PERSIST, 
         CascadeType.MERGE, 
         CascadeType.REMOVE }, 
      mappedBy = "children") 
private Set<Children> children = new HashSet<Children>(); 

您可能會或可能不會需要所有這些級聯選擇 - 挑你的選擇。

這是一個reference page以防萬一。

1

你真正需要的是

cascade=CascadeType.SAVE_UPDATE 

但那不是JPA的一部分。所以你可以用這個代替:

cascade=CascadeType.ALL 

它將包括SAVE_UPDATE(與Hibernate實現)。但它可能包含您不喜歡的其他級聯。