锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍦?/span> 澶氬皪涓 銆?/span>涓灝嶅 涓兘鏄柈鍚戦棞鑱紝涔熷氨鏄叾涓竴鏂歸棞鑱埌鍙︿竴鏂癸紝鑰屽彟涓鏂逛笉鐭ラ亾鑷繁琚棞鑱?/span> package onlyfun.caterpillar; package onlyfun.caterpillar; <?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?> User user1 = new User(); User user1 = new User(); Hibernate: insert into room (address) values (?) <?xml version="1.0" encoding="utf-8"?> User user1 = new User(); Hibernate: insert into room (address) values (?)
鍏舵牳蹇冨湪浜庢壒閲忔彃鍏ユ椂錛岀Н鏀掍竴瀹氶噺鍚庡氨鍐欏簱錛屽茍娓呴櫎SESSION閲岀殑絎竴綰х紦瀛橈紝浠ュ厤鍚庣畫鎻掑叆鎿嶄綔鍙楃紦瀛樻煡鎵捐屽獎鍝嶆晥鐜囷細
session.flush();
session.clear();
}
鍩轟簬JPA鐨勪簨鍔℃搷浣滐紝SESSION涓嶅彲瑙侊紝姝ゆ椂錛岄渶瑕佺洿鎺ヨ皟鐢‥ntityManager鐨刦lush鍜宑lear銆?br />
浣咵ntityManager涔熸槸琚皝瑁呭叆JpaDaoSupport錛屽疄闄呯殑EntityManager瀵硅薄涔熶笉瀹規槗鍙栧緱銆?br />
姝ゆ椂鍙互鐢ㄥ叾JpaTemplate鎴愬憳鐨別xecute鏂規硶鏉ュ疄鐜拌繖涓や釜鎿嶄綔錛?br />
public Object doInJpa(EntityManager em) throws PersistenceException {
em.flush();
em.clear();
return null;
}
}, true);
鍦ㄦ垜榪欓噷嫻嬭瘯緇撴灉錛?br />
娌℃湁瀹氭湡璋冪敤浠ヤ笂鏂規硶鏃訛紝鎻掑叆50涓褰曡2縐掞紝騫朵笖闅忕潃璁板綍澧炲錛屾椂闂磋秺鏉ヨ秺闀褲?br />
姣忔彃鍏?0涓皟鐢ㄤ互涓婃柟娉曞悗錛屾彃鍏?0涓褰曞皬浜?00姣錛屼笖涓嶉殢璁板綍涓暟綰挎у闀褲?br />
]]>
]]>
鍦≒D鐨凮OM涓弻鍑諱竴鏉″叧緋昏繛綰匡紝璁劇疆Navigate錛岃繖鏍鋒墠浼氬湪鍚勮嚜hbm.xml涓敓鎴恗any-to-one鍙妎ne-to-many鍏崇郴銆?br>
鍙﹀錛屾牴鎹?#8220;闄勬枃”鐨勬晥鐜囪鏄庤繕闇瑕佽緗細鐢卞鏂笵ISK緇存姢鍏崇郴錛屽茍涓斿綋HOST鏇存柊鏃訛紝涔熻鏇存柊DISK銆?br>
鐢熸垚鐨凥BM.XML濡備笅錛?br>HOST鐨勶細
<joined-subclass name="Host" table="host" dynamic-update="false" dynamic-insert="false" select-before-update="false" lazy="true" abstract="false">
<key on-delete="noaction" unique="true">
<column name="dev_id" sql-type="int" not-null="true" length="0"/>
</key>
<array name="nic" optimistic-lock="true">
<key on-delete="noaction" unique="true">
<column name="dev_id" sql-type="int" not-null="false" length="0"/>
</key>
<list-index column="IndexColumnB"/>
<one-to-many class="eb.nms.db.Nic"/>
</array>
<set name="disk" outer-join="false" inverse="true" lazy="true" optimistic-lock="true" cascade="save-update">
<key on-delete="noaction" unique="true">
<column name="dev_id" sql-type="int" not-null="false" length="0"/>
</key>
<one-to-many class="eb.nms.db.Disk"/>
</set>
</joined-subclass>
DISK鐨勶細
<class name="Disk" table="disk" mutable="true" lazy="true" abstract="false">
<id name="diskId">
<column name="disk_id" sql-type="int" not-null="true"/>
<generator class="native">
</generator>
</id>
<property name="diskName" insert="true" update="true" optimistic-lock="true">
<column name="disk_name" sql-type="varchar(254)" length="254"/>
</property>
<many-to-one name="host" class="Host" outer-join="false" update="true" insert="true">
<column name="dev_id" sql-type="int" not-null="false" length="0"/>
</many-to-one>
</class>
闄勬枃錛?br>
濡傛灉璁撻洐鏂歸兘鎰忚瓨鍒板彟涓鏂圭殑瀛樺湪錛岄欏氨褰㈡垚浜嗛洐鍚戦棞鑱紝鍦ㄥ灝嶄竴銆佷竴灝嶅鐨勪緥瀛愬彲浠ユ敼瀵竴涓嬶紝閲嶆柊璦▓User欏炲垾濡備笅錛?/span>
public class User {
private Integer id;
private String name;
private Room room;
public User() {}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
}
Room欏炲垾濡備笅錛?/span>
import java.util.Set;
public class Room {
private Integer id;
private String address;
private Set users;
public Room() {}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Set getUsers() {
return users;
}
public void setUsers(Set users) {
this.users = users;
}
public void addUser(User user) {
users.add(user);
}
public void removeUser(User user) {
users.remove(user);
}
}
濡傛錛?/span>User瀵︿緥鍙弮鑰冭嚦Room瀵︿緥鑰岀董鎸佸灝嶄竴闂滀總錛岃?/span>Room瀵︿緥璦樺緱User瀵︿緥鑰岀董鎸佷竴灝嶅闂滀總銆?/span>
鍦ㄦ槧灝勬枃浠舵柟闈紝鍙互濡備笅鎾板錛?/span>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="onlyfun.caterpillar.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<many-to-one name="room"
column="room_id"
class="onlyfun.caterpillar.Room"
cascade="save-update"
outer-join="true"/>
</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="onlyfun.caterpillar.Room" table="room">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="address"
column="address"
type="java.lang.String"/>
<set name="users" table="user" cascade="save-update">
<key column="room_id"/>
<one-to-many class="onlyfun.caterpillar.User"/>
</set>
</class>
</hibernate-mapping>
鏄犲皠鏂囦歡闆欐柟閮借ō瀹氫簡cascade鐐?/span>save-update錛屾墍浠ユ偍鍙互鐢ㄥ灝嶄竴鐨勬柟寮忎締綞寔闂滆伅錛?/span>
user1.setName("bush");
User user2 = new User();
user2.setName("caterpillar");
Room room1 = new Room();
room1.setAddress("NTU-M8-419");
user1.setRoom(room1);
user2.setRoom(room1);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(user1);
session.save(user2);
tx.commit();
session.close();
鎴栨槸鍙嶉亷渚嗙敱涓灝嶅鐨勬柟寮忎締綞寔闂滆伅錛?/span>
user1.setName("bush");
User user2 = new User();
user2.setName("caterpillar");
Room room1 = new Room();
room1.setUsers(new HashSet());
room1.setAddress("NTU-M8-419");
room1.addUser(user1);
room1.addUser(user2);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(room1);
tx.commit();
session.close();
閫欓倞鏈夊嬫晥鐜囪欏屽彲浠ユ帰璦庯紝涓婇潰鐨勭▼寮忕墖孌?/span>Hibernate灝囦嬌鐢ㄤ互涓嬬殑SQL閫茶鍎插瓨錛?/span>
Hibernate: insert into user (name, room_id) values (?, ?)
Hibernate: insert into user (name, room_id) values (?, ?)
Hibernate: update user set room_id=? where id=?
Hibernate: update user set room_id=? where id=?
涓婇潰鐨勭▼寮忓娉曡〃紺洪棞鑱敱Room鍠柟闈㈢董鎸侊紝鑰屼富鎺ф柟涔熸槸Room錛?/span>User涓嶇煡閬?/span>Room鐨?/span>room_id鏄灝戯紝鎵浠ュ繀闋堝垎鍒ュ劜瀛?/span>Room鑸?/span> User涔嬪緦錛屽啀鏇存柊user鐨?/span>room_id銆?/span>
鍦ㄤ竴灝嶅銆佸灝嶄竴褰㈡垚闆欏悜闂滆伅鐨勬儏娉佷笅錛屽彲浠ュ皣闂滆伅綞寔鐨勬帶鍒舵瑠浜ょ鄲澶氱殑涓鏂癸紝閫欐ǎ鏈冩瘮杓冩湁鏁堢巼錛岀悊鐢變笉闆g悊瑙o紝灝卞儚鏄湪鍏徃涓紝鑰侀梿瑕佽浣忓鍊嬪摗宸ョ殑濮撳悕蹇紝閭勬槸姣忎竴鍊嬪摗宸ラ兘璦樺緱鑰侀梿鐨勫鍚嶅揩銆?/span>
鎵浠ュ湪涓灝嶅銆佸灝嶄竴褰㈡垚闆欏悜闂滆伅鐨勬儏娉佷笅錛屽彲浠ュ湪銆屼竴銆嶇殑涓鏂硅ō瀹氭帶鍒舵瑠鍙嶈綁錛屼篃灝辨槸鐣跺劜瀛樸屼竴銆嶇殑涓鏂規檪錛屽皣闂滆伅綞寔鐨勬帶鍒舵瑠浜ょ鄲銆屽銆嶇殑涓鏂癸紝浠ヤ笂闈㈢殑渚嬪瓙渚嗚錛屽彲浠ヨō瀹?/span>Room.hbm.xml濡備笅錛?/span>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="onlyfun.caterpillar.Room" table="room">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="address"
column="address"
type="java.lang.String"/>
<set name="users" table="user" cascade="save-update" inverse="true">
<key column="room_id"/>
<one-to-many class="onlyfun.caterpillar.User"/>
</set>
</class>
</hibernate-mapping>
鐢辨柤闂滆伅鐨勬帶鍒舵瑠浜ょ鄲銆屽銆嶇殑涓鏂逛簡錛屾墍浠ョ洿鎺ュ劜瀛樸屼竴銆嶆柟鍓嶏紝銆屽銆嶇殑涓鏂瑰繀闋堟剰璀樺埌銆屼竴銆嶇殑瀛樺湪錛屾墍浠ョ▼寮忕墖孌靛繀闋堟敼鐐哄涓嬶細
user1.setName("bush");
User user2 = new User();
user2.setName("caterpillar");
Room room1 = new Room();
room1.setUsers(new HashSet());
room1.setAddress("NTU-M8-419");
room1.addUser(user1);
room1.addUser(user2);
// 澶氭柟蹇呴爤鎰忚瓨鍒板柈鏂圭殑瀛樺湪
user1.setRoom(room1);
user2.setRoom(room1);
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
session.save(room1);
tx.commit();
session.close();
涓婇潰鐨勭▼寮忕墖孌?/span>Hibernate灝囦嬌鐢ㄤ互涓嬬殑SQL錛?/span>
Hibernate: insert into user (name, room_id) values (?, ?)
Hibernate: insert into user (name, room_id) values (?, ?)
濡傛灉鎺у埗嬈婁氦緄﹀彟涓鏂逛簡錛岃屽彟涓鏂規矑鏈夋剰璀樺埌灝嶆柟鐨勫瓨鍦ㄧ殑瑭辨渻濡備綍錛熻│钁楀皣涓婇潰鐨勭▼寮忕墖孌典腑user1.setRoom(room1);鑸?/span> user2.setRoom(room1);縐誨幓錛屽煼琛屼箣寰岋紝鎮ㄦ渻鐧肩従璩囨枡搴腑room_id鏈冨嚭鐝?/span>null鍊鹼紝閫欑ó緄愭灉灝卞ソ姣斿湪 澶氬皪涓 涓紝鎮ㄦ矑鏈夊垎閰嶇鄲User涓鍊?/span>Room錛岀悊鎵鐣剁劧鐨勶紝room_id鏈冨嚭鐝?/span>null銆?/span>
]]>