采用人与身份证之间的关系
Person类有3个属性
private int id ;
private String name;
private IdCard card;
IdCard类有3个属性
private int id;
private String number;
private Person person;
第一种情况,主键关联(person类定位主表)
Person类的xml映射文件
<class name="com.cao.po.Person" table="person">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<one-to-one name="card" />
</class>
IdCard类的xml映射文件
<class name="com.cao.po.IdCard" table="id_card">
<!-- card表的id属性即使主键又是外键,所以主键生成策略选择foreign -->
<id name="id">
<generator class="foreign">
<!-- 指定外键根据那个属性生成 -->
<param name="property">person</param>
</generator>
</id>
<property name="number"/>
<!-- constrained属性用于表结构上建立外键关系 -->
<one-to-one name="person" constrained="true" />
</class>
添加和查询操作
public static void add(){
Session session = HibernateUtil.getSession();
Transaction ts = HibernateUtil.getTs();
Person p = new Person();
p.setName("person1");
IdCard card = new IdCard();
card.setNumber("1234");
//必须设置card的person属性,因为card表需要根据person生成主键
card.setPerson(p);
//person设置和不设置card属性,生成的表内容一样
p.setCard(card);
//不管先保持person还是先保持card,hibernate都会先保存person
session.save(card);
session.save(p);
ts.commit();
session.close();
}
public static void query(){
Session session = HibernateUtil.getSession();
// IdCard card = (IdCard) session.get(IdCard.class, 1);
// //下面两句一句生成一条select语句
// System.out.println(card.getNumber());
// System.out.println(card.getPerson().getName());
//只生成一条select语句,不能同时在一个方法中写两次查询,一级缓存
Person p = (Person) session.get(Person.class, 1);
System.out.println(p.getName());
System.out.println(p.getCard().getNumber());
session.close();
}
第二种情况,外键关联
Person类的映射
<class name="com.cao.po.Person" table="person">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<!-- property-ref属性用于指定那个card属于该person,所指定的值要和外键表中many-to-one标签的相同 -->
<one-to-one name="card" property-ref="person"/>
</class>
IdCard类的映射
<class name="com.cao.po.IdCard" table="id_card">
<id name="id">
<generator class="native" />
</id>
<property name="number"/>
<!-- 生成外键列,因为是一对一所以要把unique配成true -->
<many-to-one name="person" column="person_id" unique="true"/>
</class>
分享到:
相关推荐
Hibernate映射一对多关联关系
hibernate 映射关系学习入门 一对一映射Eclipse源码
个人的很详细的Hibernate一对一映射配置详解,对初学者有帮助!
Hibernate对象关系映射一对多 很基础等文档
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
Hibernate双向一对一关联映射(注解版)
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
Hibernate 多表映射关系配置 如,一对一 多对一 多对多等
hibernate一对一关系映射,我们需要学习的内容包括知识点
Hibernate 一对一外键单向关联 Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接...
Hibernate一对一映射这是一个小实例,对学习hibernate映射有很大的帮助
hibernate一对一映射源码 希望大家可以顶一下。。。请关注我。。
Hibernate一对多映射
熟悉Hibernate的“多对一”关系映射,并应用于web系统中
简单的Hibernate的N对N关系的映射,这里主要的只是谈到了关于如何映射一对一,多对一,多对多的单向和双向映射。 当然,其实所谓的单双向映射最终还是要表现在select时的作用,但是这一部分并未介绍。 我想,要想搞...
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
Hibernate映射关系一对多 源代码
Hibernate一对一外键映射实例,里面包含源程序,测试程序,映射文档
hibernate主键一对一关联映射代码示例
Hibernate一对一主键映射实例,里面包含源程序,测试程序,映射说明