单向一对一主键关联实例

来源:互联网 发布:淘宝客服兼职多少钱 编辑:程序博客网 时间:2024/05/01 09:56
IdCard.java类 

[java] view plaincopy
  1. public class IdCard {  
  2.   
  3.     private int id;  
  4.       
  5.     private String cardNo;  
  6.   
  7.     public int getId() {  
  8.         return id;  
  9.     }  
  10.   
  11.     public void setId(int id) {  
  12.         this.id = id;  
  13.     }  
  14.   
  15.     public String getCardNo() {  
  16.         return cardNo;  
  17.     }  
  18.   
  19.     public void setCardNo(String cardNo) {  
  20.         this.cardNo = cardNo;  
  21.     }  
  22. }  

Person.java类

[java] view plaincopy
  1. public class Person {  
  2.   
  3.     private int id;  
  4.       
  5.     private String name;  
  6.       
  7.     private IdCard idCard;  
  8.   
  9.     public int getId() {  
  10.         return id;  
  11.     }  
  12.   
  13.     public void setId(int id) {  
  14.         this.id = id;  
  15.     }  
  16.   
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.   
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.   
  25.     public IdCard getIdCard() {  
  26.         return idCard;  
  27.     }  
  28.   
  29.     public void setIdCard(IdCard idCard) {  
  30.         this.idCard = idCard;  
  31.     }  
  32.   
  33. }  

IdCard.hbm.xml映射文件

[html] view plaincopy
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="com.hibernate.IdCard" table="t_idCard">  
  7.         <id name="id">  
  8.             <generator class="native">  
  9.             </generator>  
  10.         </id>  
  11.         <property name="cardNo"/>  
  12.     </class>  
  13. </hibernate-mapping>  

Person.hbm.xml映射文件

[html] view plaincopy
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <class name="com.hibernate.Person" table="t_person">  
  7.         <id name="id">  
  8.             <!-- 采用foreign生成策略,foreign会取得关联对象的标识 -->  
  9.             <generator class="foreign">  
  10.                 <!-- property只关联对象 -->  
  11.                 <param name="property">idCard</param>  
  12.             </generator>  
  13.         </id>  
  14.         <property name="name"/>  
  15.         <!-- one-to-one指示hibernate如何加载其关联对象,默认根据主键加载  
  16.             也就是拿到关系字段值,根据对端的主键来加载关联对象  
  17.          -->  
  18.         <one-to-one name="idCard" constrained="true"/>  
  19.     </class>  
  20. </hibernate-mapping>  

hibernate.cfg.xml配置文件

[html] view plaincopy
  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  8.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_one2one_pk_1</property>  
  9.         <property name="hibernate.connection.username">root</property>  
  10.         <property name="hibernate.connection.password">root</property>  
  11.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
  12.         <property name="hibernate.show_sql">true</property>  
  13.           
  14.         <mapping resource="com/hibernate/Person.hbm.xml"/>  
  15.         <mapping resource="com/hibernate/IdCard.hbm.xml"/>  
  16.     </session-factory>  
  17. </hibernate-configuration>  

One2OneTest.java测试类(里面用到的工具类前面的博客中已经给出)

[html] view plaincopy
  1.      public void testSave1(){  
  2. Session session = null;  
  3. try{  
  4.     session = HibernateUtils.getSession();  
  5.     session.beginTransaction();  
  6.       
  7.     IdCard idCard = new IdCard();  
  8.     idCard.setCardNo("1111111111111111111");  
  9.       
  10.     Person person = new Person();  
  11.     person.setName("张三");  
  12.     //建立关联  
  13.     person.setIdCard(idCard);  
  14.       
  15.     //没有抛出TransientObjectException  
  16.     //是由一对一关联映射的特性决定的,它必须先保存关联对象IdCard  
  17.     //这样它采用foreign映射策略才能取得关联对象的标识  
  18.     //也就是它默认了cascade属性  
  19.     session.save(person);  
  20.       
  21.     session.getTransaction().commit();  
  22. }catch(Exception e){  
  23.     e.printStackTrace();  
  24.     session.getTransaction().rollback();  
  25. }finally{  
  26.     HibernateUtils.closeSession(session);  
  27. }  

测试结果(发出的sql语句):

[sql] view plaincopy
  1. Hibernate: insert into t_idCard (cardNo) values (?)  
  2. Hibernate: insert into t_person (name, id) values (?, ?)  

0 0
原创粉丝点击