Hibernate关系映射(二) 基于外键的双向一对一
基于外键的双向一对一关联映射
需要在一端添加<one-to-one>标签,用property-ref来指定反向属性引用。
还是通过刚才用户和地址来演示双向一对一关联。
代码演示
一、实体类
Account.cs,需要添加被控端的引用
package com.lxit.entity; import java.io.Serializable; public class Account implements Serializable{
public Account(){ }
private int id;
private String name;
private String password;
//需要添加被控端的引用
private Address address; 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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
} }
Address.cs,被控端也需要添加主控端的引用
package com.lxit.entity; import java.io.Serializable; public class Address implements Serializable{
public Address(){ }
private int id;
private String name; //双向1对1,被控端也知道主控端的引用
private Account account; 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 Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
}
二、映射文件
Account.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.lxit.entity.Account" table="Account">
<id column="id" name="id">
<generator class="native"/>
</id>
<property column="name" generated="never" lazy="false" name="name"/>
<property column="password" generated="never" lazy="false" name="password"/>
<!-- 通过many-to-one 标签添加唯一属性约束,建立一对一关联关系 -->
<many-to-one column="address_id" name="address" unique="true"/>
<!-- 必须通过映射关系生成的表才会生成唯一约束,否则不会生成 -->
</class>
</hibernate-mapping>
Address.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.lxit.entity.Address" table="Address">
<id column="id" name="id">
<generator class="native"/>
</id>
<property column="name" generated="never" lazy="false" name="name"/> <!-- one-to-one 映射一对一关联,name对应当前类的引用属性,property-ref属性:指定account类的属性引用 -->
<one-to-one name="account" property-ref="address"></one-to-one>
</class>
</hibernate-mapping>
jUtilTest
package com.lxit.demo2.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test; import com.lxit.entity.Account;
import com.lxit.entity.Address;
import com.lxit.util.HibernateUtil; public class AccountTest { @Test
public void createTable(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
se.create(true, true);
} @Test
public void Add(){
Transaction tx = null;
Session session = HibernateUtil.getSession();
tx = session.beginTransaction(); Address address= new Address();
address.setName("深圳宝安");
session.save(address); Account account = new Account();
account.setName("zhangsan");
account.setPassword("123");
account.setAddress(address); try {
session.save(account);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.CloseSession(session);
} } @Test
public void Add2(){
Transaction tx = null;
Session session = HibernateUtil.getSession();
tx = session.beginTransaction(); Address address= new Address();
address.setName("深圳福田");
session.save(address); Account account1 = new Account();
account1.setName("lisi");
account1.setPassword("123");
account1.setAddress(address); Account account2 = new Account();
account2.setName("wangwu");
account2.setPassword("123");
account2.setAddress(address); try {
//重复添加第二个用户,地址相同,则会报错
session.save(account1);
session.save(account2);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.CloseSession(session);
} }
}
Hibernate关系映射(二) 基于外键的双向一对一的更多相关文章
- Hibernate 基于外键的双向一对一关联映射
之前简单介绍了基于外键的单项一对一的关联映射关系,本文简单介绍基于外键的双向一对一的关联映射. 1.设计表结构 表结构对于双向一对一来说没有多少改变,只是双向都可以获取到对方. 2.创建Person对 ...
- java之hibernate之基于外键的双向一对一关联映射
这篇讲解 基于外键的双向一对一关联映射 1.考察如下信息,人和身份证之间是一个一对一的关系.表的设计 2.类结构 Person.java public class Person implements ...
- Hibernate学习(二补充)关系映射----基于外键的双向一对一
刚刚写的是基于外键的单向一对一. 那么双向一对一就是在单向一对一的基础上稍微改动就可以了. account.java和account.hbm.xml都不用变动 只要我们小小的变动address.j ...
- hibernate 关系映射之 单向外键关联一对一
这里的关系指的是对象与对象之间的关系 注解方式单向关联一对一: //这个类描述的husband是一个对应一个wife的 import javax.persistence.Entity; import ...
- java之hibernate之基于主键的双向一对一关联映射
这篇 基于主键的双向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构为: 2.类结构 Person.java public class Person implemen ...
- Hibernate(11)_基于外键的双向1对1
一.基于外键的双向1对1 对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true&q ...
- Hibernate学习(二)关系映射----基于外键的单向一对一
事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似.只需要将原来的many-to-one元素增加unique="true"属性, ...
- Hibernate关系映射(一) 基于外键的单向一对一
模拟用户和地址的映射关系,一个用户只有一个地址,用户知道地址,但是地址不知道用户.用户对地址的单向一对一映射. 一.建立实体类 Account.cs类 package com.lxit.entity; ...
- Hibernate 基于外键的单项一对一关联映射
在开发过程中很多时候会用到表与表之间一对一的关联关系,本文简单介绍在Hibernate4中单项一对一的关联映射. 1.设计表结构 2.创建Person对象 3.创建IdCard对象 4.写hbm.xm ...
随机推荐
- FZU 2297 Number theory【线段树/单点更新/思维】
Given a integers x = 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First l ...
- 基于BeanNameViewResolver解析器,自定义视图
概述 基于spring-mvc自定义视图,以BeanNameViewResolver作为解析器,以满足特殊需求. 本文以输出多个pdf文件的压缩文件,供前台下载的需求为例:但是不提供服务层实现. 实现 ...
- Linux命令之unzip
unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s)…] [-x xfile(s)…] [-d exdir] unzip将 ...
- Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(四)
把 HAProxy 用上了,终于不用担心某个节点挂了,还要去手动修改管理后台配置文件的api地址了. 在某网站下载了一个 window 可以用的版本 haproxy-1.7.8 不得不吐槽一下,作者要 ...
- Linux基础系列-Day6
Samba服务(基于CentOS 7.0) Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,Samba主要用于Linux或UNIX和Windows系统之 ...
- WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping——牛腩新闻发布系统
VS2011使用验证控件出现" WebForms UnobtrusiveValidationMode 需要"jquery"ScriptResourceMapping.请添 ...
- VB查询数据库之组合查询——机房收费总结(二)
在机房收费系统中,组合查询用的还是挺多的,像上机状态查询窗体.学生上机统计信息窗体.操作员工记录窗体.基本信息维护窗体.这其中,学生基本信息维护窗体中的东西比较多,就以它为例子,说说组合查询吧! 学生 ...
- hdu 5961 传递 (2016ccpc 合肥站 A题)
传递 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...
- AtCoder - 3939 Strange Nim
Problem Statement Takahashi and Aoki are playing a stone-taking game. Initially, there are N piles o ...
- BZOJ 2888 资源运输(启发式合并LCT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2888 [题目大意] 不断加边,问每个连通块的重心到其它点的距离和的和 [题解] 启发式 ...