最近使用annotation做hibernate映射,有兩張表人員(Person)表 和醫(yī)院(Hospital)表,人員表和醫(yī)院表是ManyToOne,業(yè)務(wù)只需要從人員表出發(fā)設(shè)置不同醫(yī)院,所以是單向的ManyToOne
在Person表關(guān)系定義如下:
@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name = "HOSPITAL_ID")
但我在后臺(tái)方法測試時(shí),如果醫(yī)院信息修改或新建,保存到人員表中,醫(yī)院信息不會(huì)級聯(lián)更新或新增,級聯(lián)關(guān)系不起作用
我又用hbm.xml方式實(shí)驗(yàn)了一下,在Person端加上cascade="save-update",如果醫(yī)院信息修改或新增,保存人員信息會(huì)級聯(lián)更新或新增到醫(yī)院表,方式如下:
<many-to-one name="hospital" class="com.Hospital" fetch="select" lazy="false" not-null="true" cascade="save-update">
<column name="HOSPITAL_ID" />
</many-to-one>
后來經(jīng)別人指點(diǎn)發(fā)現(xiàn)我引用的包是
import javax.persistence.CascadeType;
import javax.persistence.Cascade;
而應(yīng)該使用hibernate annotation包
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
Person表的關(guān)聯(lián)關(guān)系應(yīng)改成
@ManyToOne()
@Cascade(value={CascadeType.SAVE_UPDATE})
@JoinColumn(name = "HOSPITAL_ID")
這樣級聯(lián)更新和新增功能就成功了
在Person表關(guān)系定義如下:
@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE})
@JoinColumn(name = "HOSPITAL_ID")
但我在后臺(tái)方法測試時(shí),如果醫(yī)院信息修改或新建,保存到人員表中,醫(yī)院信息不會(huì)級聯(lián)更新或新增,級聯(lián)關(guān)系不起作用
我又用hbm.xml方式實(shí)驗(yàn)了一下,在Person端加上cascade="save-update",如果醫(yī)院信息修改或新增,保存人員信息會(huì)級聯(lián)更新或新增到醫(yī)院表,方式如下:
<many-to-one name="hospital" class="com.Hospital" fetch="select" lazy="false" not-null="true" cascade="save-update">
<column name="HOSPITAL_ID" />
</many-to-one>
后來經(jīng)別人指點(diǎn)發(fā)現(xiàn)我引用的包是
import javax.persistence.CascadeType;
import javax.persistence.Cascade;
而應(yīng)該使用hibernate annotation包
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
Person表的關(guān)聯(lián)關(guān)系應(yīng)改成
@ManyToOne()
@Cascade(value={CascadeType.SAVE_UPDATE})
@JoinColumn(name = "HOSPITAL_ID")
這樣級聯(lián)更新和新增功能就成功了