一對一的關系在數據庫中表示為主外關系.在Hibernate中的一對一關系通過映射實現。例如.人和身份證的關系.每個人都對應一個身份證號.我們應該兩個表.一個是關于人信息的表(user).別外一個是身份證相關信息的表(card).card表的主鍵對應該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對象中存一個Card 對象 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對象中存一個Users 對象 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"); //卡跟用戶建立關系 card.setUsers(user); //用戶也跟卡建立關系 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(); //查找用戶信息,可以通過用戶來找到對應的卡的信息 Users user=(Users)session.get(Users.class,new Integer(1)); System.out.println(user.getUserName()); System.out.println(user.getCard().getCardNo()); |
【編輯推薦】
- 層層解析Hibernate中的事務的濫用
- 解析Hibernate中的事務管理
- 解析Hibernate的批量刪除功能
- Hibernate、Spring和Struts工作原理及使用理由