采用人与身份证之间的关系
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>
分享到:
相关推荐
在提供的压缩包`TestHiberOnetoOne`中,可能包含了使用Eclipse创建的Hibernate一对一映射关系的项目源码。你可以通过运行这个项目来更直观地理解一对一映射的工作原理,包括实体类的定义、配置文件的编写以及如何在...
单向一对一映射通常涉及一个实体持有另一个实体的引用,而双向一对一映射则意味着两个实体都可以互相引用。这种关联关系在数据库层面通常通过主键外键约束来实现,但在代码层面则通过注解来表达。 首先,我们需要...
Hibernate对象关系映射一对多 很基础等文档
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。
2. **一对一映射**:使用@OneToOne注解来声明一对一关系。可以设置 mappedBy 属性来指定关联的反向引用字段。 3. **外键实现**:在一对一关系中,外键可以放在任一实体的表中。若外键在从表,称为单向一对一关联;...
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
### Hibernate一对一关联映射原理 一对一关联映射是指在数据库中两个表之间存在一对一的关系,例如,一个人只有一个身份证,一个身份证也只属于一个人。在Hibernate中,我们可以通过@OneToOne注解来实现这种映射。 ...
在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...
一对一映射表示两个实体类之间存在唯一的关系,就像一个人只能有一个身份证。在 Hibernate 中,这可以通过在两个实体类中添加 `@OneToOne` 注解实现。此外,还可以使用 `@PrimaryKeyJoinColumn` 或 `@JoinColumn` ...
"hibernate一对一映射"是Hibernate中的一个重要概念,它用于表示两个实体类之间一对一的关系。这种关系意味着在一个实体类中,每个实例都唯一对应另一个实体类的单个实例。 一对一映射有以下几种实现方式: 1. **...
二、多对多映射关系 在关系数据库中,多对多关系是指两个表之间存在多个对应关系。例如,学生可以选修多门课程,而课程也可以被多名学生选修。在Hibernate中,多对多关系通过中间表(也称为联接表或关联表)来实现,...
**Hibernate一对一映射详解** 在Java的持久化框架中,Hibernate是备受青睐的一员,它提供了一种方便的方式来处理对象与数据库之间的映射关系。本文将深入探讨Hibernate中的一对一映射,帮助开发者理解并掌握这种...
本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合关系"、"student与class的多对一"以及"一对多映射"的概念。 首先,让我们理解一下Hibernate中的集合映射。在关系型数据库中,一个实体...
在这个实例中,我们将深入探讨Hibernate一对一主键映射的概念、配置以及如何通过源代码和测试程序进行实践。 1. **一对一关系理解**: 一对一关系指的是一个实体类中的记录对应另一个实体类中的唯一一条记录。例如...
"多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...
通常情况下,外键字段可以包含NULL值,但在一对一映射中,我们会设置这个字段不可为空来确保关系的唯一性。例如,在`Person`表中添加一个`idCardId`字段作为外键,指向`IdCard`表的主键。 ##### 单向一对一唯一外键...
**标题:Hibernate一对一外键映射** 在关系型数据库中,一对一(One-to-One)关联是一种常见的关系,它表示两个实体之间存在着唯一的关系。Hibernate,作为Java领域中的一个流行的ORM(对象关系映射)框架,提供了...