本文通過Users表、Card表和示例代碼對(duì)Hibernate一對(duì)一例子進(jìn)行的講解,希望讀者可以掌握Hibernate中的一對(duì)一關(guān)系。
一對(duì)一的關(guān)系在數(shù)據(jù)庫中表示為主外關(guān)系.在Hibernate中的一對(duì)一關(guān)系通過映射實(shí)現(xiàn)。例如.人和身份證的關(guān)系.每個(gè)人都對(duì)應(yīng)一個(gè)身份證號(hào).我們應(yīng)該兩個(gè)表.一個(gè)是關(guān)于人信息的表(user).別外一個(gè)是身份證相關(guān)信息的表(card).card表的主鍵對(duì)應(yīng)該user表的主鍵userid,也是user表的外鍵.有人才能有身份證.
Users表
CREATE TABLE `users` ( `user_id` int(11) NOT NULL auto_increment, `user_name` varchar(20) default NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk; |
Card 表
CREATE TABLE `card` ( `card_id` int(11) NOT NULL auto_increment, `card_no` varchar(20) default NULL, `user_id` int(11) default NULL, PRIMARY KEY (`card_id`), KEY `user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk; |
JAVA 代碼
Users 類
package org.yy.hbn.pojo; public class Users implements java.io.Serializable { private Integer userId; private String userName; private Card card; //Users對(duì)象中存一個(gè)Card 對(duì)象 public Users() { } public Users(String userName) { this.userName = userName; } public Integer getUserId() { return this.userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } public Card getCard() { return card; } public void setCard(Card card) { this.card = card; } public Users(Integer userId, String userName, Card card) { super(); this.userId = userId; this.userName = userName; this.card = card; } } |
Card 類
package org.yy.hbn.pojo; public class Card implements java.io.Serializable { private Integer cardId; private String cardNo; private Users users; //Card對(duì)象中存一個(gè)Users 對(duì)象 public Card(Integer cardId, String cardNo, Users users) { super(); this.cardId = cardId; this.cardNo = cardNo; this.users = users; } public Card() { } public Integer getCardId() { return this.cardId; } public void setCardId(Integer cardId) { this.cardId = cardId; } public String getCardNo() { return this.cardNo; } public void setCardNo(String cardNo) { this.cardNo = cardNo; } public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } } |
XML 代碼
Card.hbn.xml
Users.hbn.xml
hibernate.cfg.xml 代碼
JAVA 測試代碼
package org.yy.hbn.test; import org.hibernate.Transaction; import org.hibernate.Session; import org.yy.hbn.HibernateSessionFactory; import org.yy.hbn.pojo.Card; import org.yy.hbn.pojo.Users; public class test { public static void main(String[] args) { select(); } private static void add() { Session session=HibernateSessionFactory.getSession(); Transaction tran=session.beginTransaction(); try { Users user=new Users(); user.setUserName("UU"); Card card=new Card(); card.setCardNo("89012345"); //卡跟用戶建立關(guān)系 card.setUsers(user); //用戶也跟卡建立關(guān)系 user.setCard(card); session.save(user); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); }finally{ HibernateSessionFactory.closeSession(); } } private static void select() { Session session=HibernateSessionFactory.getSession(); //查找用戶信息,可以通過用戶來找到對(duì)應(yīng)的卡的信息 Users user=(Users)session.get(Users.class,new Integer(1)); System.out.println(user.getUserName()); System.out.println(user.getCard().getCardNo()); |
【編輯推薦】
- 層層解析Hibernate中的事務(wù)的濫用
- 解析Hibernate中的事務(wù)管理
- 解析Hibernate的批量刪除功能
- Hibernate、Spring和Struts工作原理及使用理由