Hibernate关联关系(3)

一对一关联

 

根据各种教科书的例子,一对一关联可通过两种方式实现,通过主键关联和通过外键关联,这里我只介绍一下通过外键关联。

在做一个例子,我在上面的程序中有一个User表,这里我在做一个IDCARD表,表里的内容设置了user的一些具体信息,他们是一对一的关系。

 

IDCARD表的SQL

CREATE TABLE `idcard` (

  `crd_id` int(11) NOT NULL auto_increment,

  `crd_no` char(11) NOT NULL default 0,

  `crd_eml` char(20) default NULL,

  `usr_id` int(11)NOT NULL default 0,

  PRIMARY KEY  (`crd_id`)

) ENGINE=InnoDB DEFAULT CHARSET=UTF8;

 

IdCard类为:

public class IdCard {

   

    private int id;

    private String cardNo;

    private String email;   

    private UserInfo user;

 

这里的一对一关联关系可以看成是一对多的一个特殊形式,可能也能猜到,就是在多的一端设置其外键唯一就可以了,即在节点<many-to-one>里面价格属性,unique="true"

IdCard映射文件为:

<?xml version='1.0' encoding='utf-8'?>

<!DOCTYPE hibernate-mapping

   PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping>

   <class name="xiaojin.hibernate.entity.Message" table="MESSAGE">

      <id name="msgId" type="int" column="msg_id">

         <generator class="native"/>

      </id>

      <property name="ttl" column="msg_ttl" type="string" not-null="true"/>

      <property name="desc" column="msg_desc" type="string" not-null="true"/>

      <property name="date" column="msg_date" type="string" />

      <many-to-one name="user" class="xiaojin.hibernate.entity.UserInfo" column="usr_id" cascade="none"></many-to-one>

   </class>

</hibernate-mapping>

 

在一的一段的映射文件里也就是User里面再上一个<one-to-one>节点:

<one-to-one name="idCard" class="xiaojin.hibernate.entity.IdCard" cascade="all" property-ref="user" />

property-ref="user" 指定关联对象的属性名。

 

测试方法:

    public static void saveUserAndIdCard(){

        UserInfo user= new UserInfo();

        user.setName("xiaojin1");

        user.setPassword("xiaojin");

       

        IdCard idCard = new IdCard();

       

        idCard.setCardNo("12121212");

        idCard.setEmail("email");

        idCard.setUser(user);

       

        user.setIdCard(idCard);

       

        save(user);

        System.out.println("Save over ");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值