2013-12-12 65 views
1

我正在使用cascade = CascadeType.PERSIST在我的類中對應於下面給出的子表(PAT)。休眠(4.2.7):瞭解級聯類型PERSIST

... 
@ManyToOne(cascade=CascadeType.PERSIST) 
private Neighbourhood nh; 
... 

鄰域類表示父表(NH)。

Here is the database relationship:

SQL生成:

Hibernate: select neighbourh_.CODE, neighbourh_.NAME as NAME2_0_ from NH neighbourh_ where neighbourh_.CODE=? 
Hibernate: insert into PAT (DOB, DOOR_NUM, EMAIL, FIRST_NAME, HEIGHT, IS_MALE, LAST_NAME, LINE1, LINE2, MOBILE, nh_CODE, PHONE_HOME, PHONE_OFFICE, POSTAL_CODE, WEB, WEIGHT, ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 

問題

當我嘗試將記錄保存到子表(PAT),進入父表(NH )未被創建。我想要在父表中以及子表中創建一個條目。

這不是CascadeType.PERSIST應該做什麼?

回答

1

是的,這就是堅持要做的事情。鑑於上面只我的細節不能肯定地說,它爲什麼不插入,但我可以猜到:

Neighborhood實體擁有的PrimaryKey code已經存在於數據庫,當你與子表(PAT)插入。這就是爲什麼它在第一個查詢中查找它的原因。所以如果Neighborhood代碼不在那裏,它會爲它插入一個SQL。

+0

NH表(鄰居實體)是空的,我已經證實了這一點。順便說一句,ALL而不是PERSIST插入兩個表中的記錄如預期,但我仍然與PERSIST這個問題。 – PhantomReference

+0

您確定該條目沒有保存一點嗎?當插入PAT條目時,插入的PAR行的NH代碼是什麼? –