程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> hibernate3學習筆記(十七)|關系映射:多對一

hibernate3學習筆記(十七)|關系映射:多對一

編輯:關於JAVA

數據表設計如下圖:

DDL文件:

1.CREATE TABLE user (
2. id INT(11) NOT NULL auto_increment PRIMARY KEY,
3. name VARCHAR(100) NOT NULL default '',
4. room_id INT(11)
5.);
6.
7.CREATE TABLE room (
8. id INT(11) NOT NULL auto_increment PRIMARY KEY,
9. address VARCHAR(100) NOT NULL default ''
10.);

Room.java

1.package com.hb3.pack_16.model;
2.
3.public class Room {
4. 5. private Integer id;
6. private String address;
7.
8. public Room() {
9. }
10.
11. public Integer getId() {
12. return id;
13. }
14. public void setId(Integer id) {
15. this.id = id;
16. }
17. public String getAddress() {
18. return address;
19. }
20. public void setAddress(String address) {
21. this.address = address;
22. }
23.}

User.java

1.package com.hb3.pack_16.model;
2.
3.public class User {
4. 5. private Integer id;
6. private String name;
7. private Room room;
8. 9. public User() {
10. }
11. 12. public Integer getId() {
13. return id;
14. }
15. public void setId(Integer id) {
16. this.id = id;
17. }
18. public String getName() {
19. return name;
20. }
21. public void setName(String name) {
22. this.name = name;
23. }
24. public Room getRoom() {
25. return room;
26. }
27. public void setRoom(Room room) {
28. this.room = room;
29. }
30.}

Room.hbm.xml:

1.<?xml version="1.0" encoding="utf-8"?>
2.<!DOCTYPE hibernate-mapping
3. PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">5.6.<hibernate-mapping>
7. 8. <class name="com.hb3.pack_16.model.Room" table="room"> 9.
10. <id name="id" column="id">
11. <generator class="native"/>
12. </id>
13. 14. <property name="address"
15. column="address"
16. type="java.lang.String"/>
17. </class>
18. 19.</hibernate-mapping>

User.hbm.xml:

1.<?xml version="1.0" encoding="utf-8"?>
2.<!DOCTYPE hibernate-mapping
3. PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5. 6.<hibernate-mapping>
7. 8. <class name="com.hb3.pack_16.model.User" table="user"> 9.
10. <id name="id" column="id" type="java.lang.Integer">
11. <generator class="native"/>
12. </id>
13. 14. <property name="name" column="name" type="java.lang.String"/>
15.
16. <many-to-one name="room"
17. column="room_id"
18. class="com.hb3.pack_16.model.Room" 19. cascade="all" 20. outer-join="true"/>
21. </class>
22. 23.</hibernate-mapping>

測試代碼:

1.package com.hb3.pack_16;
2.
3.import java.io.IOException;
4.import java.sql.SQLException;
5. 6.import org.hibernate.Session;
7.import org.hibernate.SessionFactory;
8.import org.hibernate.Transaction;
9.import org.hibernate.cfg.Configuration;
10. 11.import com.hb3.pack_16.model.Room;
12.import com.hb3.pack_16.model.User;
13.
14. 15.public class BusinessService {
16. 17. public static void main(String[] args) throws IOException, SQLException {
18.
19. Configuration config = new Configuration().configure();
20. SessionFactory sessionFactory = config.buildSessionFactory();
21. Session session = sessionFactory.openSession();
22. 23. Room room1 = new Room();
24. room1.setAddress("NTU-M8-419");
25. Room room2 = new Room();
26. room2.setAddress("NTU-G3-302");
27.
28. User user1 = new User();
29. user1.setName("shenbin");
30. user1.setRoom(room1);
31.
32. User user2 = new User();
33. user2.setName("chenyan");
34. user2.setRoom(room1);
35.
36. User user3 = new User();
37. user3.setName("yangye");
38. user3.setRoom(room2);
39. 40. Transaction tx = session.beginTransaction();
41. session.save(user1);
42. session.save(user2);
43. session.save(user3);
44. tx.commit();
45. 46. User user = (User) session.load(User.class, new Integer(1));
47. System.out.println(user.getName());
48. System.out.println(user.getRoom().getAddress());
49. 50.
51. session.close();
52. sessionFactory.close();
53. }
54.}

在<many-to-one>的設定中:

cascade表示操作時的級聯關系。表示主控方在進行增刪改操作時,被控方是否進行相關操作。

outer-join表示查詢時是否使用外連接查詢方式。

outer-join為true的時候,生成的查詢SQL為:

Hibernate:
select user0_.id as id1_, user0_.name as name0_1_, user0_.room_id as room3_0_1_,
room1_.id as id0_, room1_.address as address1_0_ from user user0_
left outer join room room1_ on user0_.room_id=room1_.id where user0_.id=?
outer-join為false的時候,生成的查詢SQL為:Hibernate:
select user0_.id as id0_, user0_.name as name0_0_, user0_.room_id as room3_0_0_
from user user0_ where user0_.id=?
Hibernate:
select room0_.id as id0_, room0_.address as address1_0_
from room room0_ where room0_.id=?

不過最好使用fetch屬性來表示,及fetch="join"或者fetch="select"。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved