Hibernate之基于主键映射的一对一关联关系
1. 基于主键的映射策略:指一端的主键生成器使用foreign策略,表明根据”对方”的主键来生成自己的主键,自己并不能独立生成主键.并用<param> 子元素指定使用当前持久化类的哪个属性作为“对方”
2. 采用foreign主键生成器策略的一端增加one-to-one元素映射关联属性,其one-to-one属性还应增加constrained=“true”属性;另一端增加one-to-one元素映射关联属性
3. constrained(约束):指定为当前持久化类对应的数据库表的主键添加一个外键约束,引用被关联的对象(“对方”)所对应的数据库表主键
4. 单元测试示例代码:
须要被映射的2个实体类:
public class Manager {
private int mgrId;
private String mgrName;
private Department dept;
public int getMgrId() {
return mgrId;
}
public void setMgrId(int mgrId) {
this.mgrId = mgrId;
}
public String getMgrName() {
return mgrName;
}
public void setMgrName(String mgrName) {
this.mgrName = mgrName;
}
public Department getDept() {
return dept;
}
public void setDept(Department dept) {
this.dept = dept;
}
}
public class Department {
private int deptId;
private String deptname;
private Manager mgr;
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
public Manager getMgr() {
return mgr;
}
public void setMgr(Manager mgr) {
this.mgr = mgr;
}
}
2个实体类分别对于那个的hbm映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2015-9-25 22:25:22 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.elgin.hibernate.one2one.primary.Manager" table="MANAGER">
<id name="mgrId" type="int">
<column name="MGRID" />
<generator class="native" />
</id>
<property name="mgrName" type="java.lang.String">
<column name="MGRNAME" />
</property>
<one-to-one name="dept" class="com.elgin.hibernate.one2one.primary.Department"></one-to-one>
</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">
<!-- Generated 2015-9-25 22:25:22 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="com.elgin.hibernate.one2one.primary">
<class name="Department" table="DEPARTMENT">
<id name="deptId" type="int">
<column name="DEPTID" />
<!-- 使用外键的方式来生成当前主键 -->
<generator class="foreign" >
<!-- property属性指定当前实体化类的哪一个属性的主键作为外键 -->
<param name="property">mgr</param>
</generator>
</id>
<property name="deptname" type="java.lang.String">
<column name="DEPTNAME" />
</property>
<one-to-one name="mgr" class="Manager" constrained="true"></one-to-one>
</class>
</hibernate-mapping>
5. 单元测试类:
public class HibernateTest2 {
//如此声明只为方便测试,生产环境不能这么用
private SessionFactory sessionFactory;
private Session session;
private Transaction transcation;
@Before
public void init(){
Configuration cfg=new Configuration().configure();
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
sessionFactory=cfg.buildSessionFactory(serviceRegistry);
session=sessionFactory.openSession();
transcation=session.beginTransaction();
}
@Test
public void testOne2OnePrimarySave(){
Manager mgr=new Manager();
mgr.setMgrName("XXXfffff");
Department dept=new Department();
dept.setDeptname("软件开发部rrr");
dept.setMgr(mgr);
mgr.setDept(dept);
//先插入那一端都不会发出update语句
session.save(dept);
session.save(mgr);
}
@Test
public void testOne2OnePrimaryGet(){
//1.依旧使用懒加载,默认情况下不直接查询出关联的对象,而是返回对应的代理对象,等到使用的时候再来初始化
//2.所以在session关闭的情况下仍旧会出现懒加载异常
Department dept=(Department) session.get(Department.class, 1);
System.out.println(dept.getDeptname());
//3.在查询没有外键的实体对象时使用左外连接一并查询出其关联的对象并初始化
Manager mgr=(Manager) session.get(Manager.class, 1);
System.out.println(mgr.getMgrName());
}
@After
public void destory(){
transcation.commit();
session.close();
sessionFactory.close();
}
}
Hibernate之基于主键映射的一对一关联关系的更多相关文章
- java之hibernate之基于主键的双向一对一关联映射
这篇 基于主键的双向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构为: 2.类结构 Person.java public class Person implemen ...
- java之hibernate之基于主键的单向一对一关联映射
这篇讲 基于主键的单向一对一关联映射 1.依然考察人和身份证的一对一关系,如果采用主键关联,那么其表结构应该为: 2.类结构 Person.java public class Person imple ...
- Hibernate(九):基于主键映射的1-1关联关系
背景: 在实际开发中我们会遇到新建一个用户表,但这个表字段过长,而且有写字段常用(主要),有些字段比较不常用(次要).此时,我们会考虑到把用户信息拆分到两张表中:member(存储用户主要信息),me ...
- hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同
基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...
- Hibernate之基于外键映射的一对一(1-1)关联关系
1.对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true"属性来表示为1 ...
- Hibernate 基于外键映射的一对一关联关系随手记
//有外键的一端默认使用懒加载. //没有外键的一端不使用懒加载,而是直接将它引用的对象也一并查询出来. //没有外键列不仅有外键约束还有唯一约束,即没有外键列一端的对象不能被有外键列一端的两个对象同 ...
- hibernate笔记--基于主键的单(双)向的一对一映射关系
上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...
- Hibernate(八):基于外键映射的1-1关联关系
背景: 一个部门只有一个一把手,这在程序开发中就会设计数据映射应该设置为一对一关联. 在hibernate代码开发中,实现这个业务有两种方案: 1)基于外键映射的1-1关联: 2)基于主键映射的1-1 ...
- 一对一关联关系基于主键映射的异常 IdentifierGenerationException
具体异常:org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one pro ...
随机推荐
- tokudb引擎安装-2
前言:因为现在tokuDB直接整合到Percona server里面了,下载页面直接跳转到下载Percona Server 页面了.安装方法跟以前不一样了,下面就来看一下新版本怎么安装了 ##准备阶段 ...
- Android开发之EventBus的简单使用
参考: 1.http://blog.csdn.net/harvic880925/article/details/40660137 2.http://blog.csdn.net/harvic880925 ...
- 1346. Intervals of Monotonicity(dp)
1346 简单dp #include <iostream> #include<cstdio> #include<cstring> #include<algor ...
- source insight快捷键及使用技巧
source insight快捷键及使用技巧 退出程序 : Alt+F4 重画屏幕 ...
- Android 获取屏幕尺寸与密度
android中获取屏幕的长于宽,参考了网上有很多代码,但结果与实际不符,如我的手机是i9000,屏幕大小是480*800px,得到的结果却为320*533 结果很不靠谱,于是自己写了几行代码,亲 ...
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
1.前言 Android中经常会遇到把View转换为Bitmap的情形,比如,对整个屏幕视图进行截屏并生成图片:Coverflow中需要把一页一 页的view转换为Bitmap.以便实现复杂的图形效果 ...
- poj3683 Priest John's Busiest Day
2-SAT. 读入用了黄学长的快速读入,在此膜拜感谢. 把每对时间当作俩个点.如果有交叉代表相互矛盾. 然后tarjan缩点,这样就能得出当前的2-SAT问题是否有解. 如果有解,跑拓扑排序就能找出一 ...
- uva12716GCD XOR
筛法,打表. 通过打表可知,但gcd(a,b)==a xor b时,a xor b = a-b. 就是求满足 c = a-b且c = a xor b 的c的个数. #include<cstdio ...
- 【笨嘴拙舌WINDOWS】伟大的变革
"改革"."革命"."变革" 这几个词语毫无疑问是每一个时代必须被呼吁的词语,当一个国家没有人求变时,那是一个时代的悲剧.无论是文景之治,贞 ...
- JQuery Ajax 在asp.net中使用小结
自从有了JQuery,Ajax的使用变的越来越方便了,但是使用中还是会或多或少的出现一些让人短时间内痛苦的问题.本文暂时总结一些在使用JQuery Ajax中应该注意的问题,如有不恰当或者不完善的地方 ...