Hibernate 一对一主键 单向关联

使用范围:1个表的主键,与另一个表的主键 1:1 对应。
1-1的关联可以基于主键关联,但基于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成。另外,另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加constrained="true"属性,表明该类主键由关联类生成。

一、模型介绍
一个人(Person)对应一个身份证(IDCard)。
二、实体(省略getter、setter方法)

public class Person {
private int personid;
private String name;
private int age;

private IDCard iDCardPk; //作为外键关联
}

public class IDCard{
private int idCardid;
private String idCardName;
}

三、表模型

mysql> desc idcard;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| idcardid | int(11) | NO | PRI | NULL | auto_increment |
| idcardname | varchar(255) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+

mysql> desc person;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| personid | int(11) | NO | PRI | | |
| name | varchar(255) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+

四.映射方法:在Person中配置id生成策略为:
<hibernate-mapping>
<class name="com.lavasoft.Person" table="PERSON">
<id name="personid" column="presonid">
<!--基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键-->
<generator class="foreign">
<!--关联持久化类的属性名-->
<param name="property">idCardpk</param>
</generator>
</id>
<property name="name"/>
<property name="age"/>
<!--用于映射1-1关联-->
<one-to-one name="idCardPk" constrained="true"/>
</class>
</hibernate-mapping>

<hibernate-mapping>
<class name="com.lavasoft.IDCard" table="idcard">
<id name="idCardid">
<generator class="identity"/>
</id>
<property name="idCardName"/>
</class>
</hibernate-mapping>
六、测试方法

public class Test_11pk {
public static void main(String[] args){
Person p1=new Person();

p1.setAge(21);
p1.setName("p1");

IDCard card1 = new IDCard();
card1.setIdCardName("kexcking");

p1.setIdCardpk(card1);

Session session= HibernateUtil.getCurrentSession();
Transaction tx=session.beginTransaction();
session.save(card1);
session.save(p1);
tx.commit();
HibernateUtil.closeSession();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值