1.两个实体类一个personanno一个phonenumber都设置为@Entity并且都有自己的@Id
2.在personanno类里新增一个属性phonenumber并且有getset方法
3.在personanno类的getPhoneNumber方法上注解@OneToOne
4.在hibernate.cfg.xml配置两个实体类映射关系
<mapping class="com.meiyoudao.domain.PersonAnno"/>
<mapping class="com.meiyoudao.domain.PhoneNumber"/>
5.常用的hibernate创建语句方法
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
第一个参数,表示是否在数据库中执行.第二个参数,是否在控制台中打印.
package com.meiyoudao.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class PersonAnno {
private int id;
private String name;
private String weight;
private PhoneNumber phoneNumber;
@OneToOne
public PhoneNumber getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}
package com.meiyoudao.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
/**
* @author User
*
*/
@Entity
public class PhoneNumber {
private int id;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private String number;
private String telphone;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
}
<!--hibernate.cfg.xml 配置-->
<mapping class="com.meiyoudao.domain.PersonAnno"/>
<mapping class="com.meiyoudao.domain.PhoneNumber"/>
XML 版本 one2one外键关联
package com.meiyoudao.domain;
/**
* @author meiyoudao
*
*/
public class Person {
private int id;
private String name;
private String weight;
private PhoneNumber phoneNumber;
public PhoneNumber getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
package com.meiyoudao.domain;
/**
* @author meiyoudao
*
*/
public class PhoneNumber {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private String number;
private String telphone;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.meiyoudao.domain">
<class name="PhoneNumber">
<id name="id"></id>
<property name="number"/>
<property name="telphone"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.meiyoudao.domain">
<class name="Person">
<id name="id">
</id>
<property name="name"/>
<property name="weight"/>
<!-- one2one 在XML中配置也是用many-to-one -->
<!-- 只要unique="true"为true就可以了.唯一属性为true-->
<many-to-one name="phoneNumber" unique="true"></many-to-one>
</class>
</hibernate-mapping>
<!--hibernate.cfg.xml中的映射配置-->
<mapping resource="com/meiyoudao/domain/Person.hbm.xml"/>
<mapping resource="com/meiyoudao/domain/PhoneNumber.hbm.xml"/>
需要注意的测试方法
hibernate中是先把两个对象都insert进表中,然后再进行一次update使这两条记录关联起来.
@Test
public void saveUnit(){
session.beginTransaction();
Person person = new Person();
PhoneNumber pn = new PhoneNumber();
pn.setNumber("1234567890");
pn.setTelphone("IPHONE");
person.setPhoneNumber(pn);
person.setName("daodao1");
person.setId(3);
//两个对象都要save
session.save(person);
session.save(pn);
}
分享到:
相关推荐
本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...
在上面的配置中, `<many-to-one>` 标签指定了Person实体与IdCard实体之间的一对一唯一外键关联关系,其中unique="true"指定了多的一端的多重性为一。 Hibernate 一对一唯一外键关联映射的应用 在实际应用中,一对...
2. 唯一外键关联保持了数据独立性,避免冗余,但增加了表的复杂度,需要额外的外键字段。 四、源码分析: 在Hibernate源码中,`OneToOne`和`PrimaryKeyJoinColumn`等注解会由元数据解析器处理,生成对应的SQL JOIN...
2. **唯一外键关联** - 在一对一关联中,唯一外键关联是指在一个实体中定义了另一个实体的主键作为其字段,形成外键约束,确保了数据的一致性和完整性。 3. **双向关联与单向关联** - **单向关联**:只有一方...
二、唯一外键关联映射 在Hibernate中,一对一关联可以通过配置XML映射文件或使用注解来实现。这里我们将使用注解方式进行说明。首先,我们需要在两个实体类中分别定义对应的属性,并使用`@OneToOne`注解来指定关联...
唯一外键关联映射则是将外键放在一方实体类中,表示该实体类拥有另一个实体类的一个实例。 ### 1. Hibernate一对一唯一外键关联映射原理 在一对一关联中,外键通常放在关系的“从”方,即依赖于另一方的实体。唯一...
基于外键的One-to-One映射是其中的一种实现方式,它通过在一方或双方实体的表中添加外键来建立关联。接下来,我们将深入探讨这种映射策略及其配置。 **1. 一对一关系的概念** 一对一关系是指两个实体之间存在唯一的...
本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理数据库中的唯一外键关联时。这种映射方式允许在一个实体类中引用另一个实体类的唯一实例,形成一对一的关系。在...
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
"一对一(One-to-One)"外键关联是Hibernate支持的一种关系映射类型,用于描述两个实体之间一对一的关联关系。这种关系通常存在于具有唯一性的实体之间,例如一个人只有一个身份证,或者一个员工只有一个办公桌。 *...
**压缩包子文件的文件名称列表:s2sh_relation01_one2one_uni_fk** 这个文件名暗示了这是一组基于Spring、Struts和Hibernate(简称S2SH)的示例代码,具体涉及的是关系映射中的一对一单向外键关联。"uni_fk"表示...
压缩包文件`s2sh_relation02_one2one_bi_fk`可能包含了演示这个一对一双向外键关联的完整代码示例。通常,这样的示例会包含实体类、持久化操作以及相关的测试用例。通过运行这些示例,你可以更直观地了解如何在实际...
这里的`many-to-one`元素表示Address与Person的一对多关联,column属性指定了外键列的名称,class属性指定了Person实体的全限定类名,cascade属性可以指定级联操作。 在实际使用中,可以通过Hibernate的Session接口...
这个示例可能包括了两个实体类的定义,以及它们之间的外键关联配置,通过运行这个示例,学习者可以直观地看到如何在Hibernate中创建和使用外键。 综上所述,了解和熟练掌握Hibernate中外键的使用对于进行J2EE开发至...
在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...
本篇将深入探讨Hibernate中的一对一单向外键关联,通过注解和XML配置两种方式进行实现。这种关联允许一个实体类与另一个实体类之间存在一对一的关系,并且只在其中一个实体类中维护这种关系。 首先,我们来理解一对...
首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种关联通常体现在数据库设计中,比如一个用户只有一个账户,...