- 浏览: 7189399 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (397)
- 架构研究 (44)
- 网络协议-TCP/HTTP (20)
- SPRING (23)
- HIBERNATE 3 (30)
- STRUTS 2 (20)
- Java/J2se (25)
- Servlet/Jsp (9)
- 开发工具IDE (10)
- WEB服务器 (17)
- 前端--Java Script (33)
- 前端--CSS (7)
- OS--Linux (31)
- OS--MAC OS (19)
- MySQL数据库 (19)
- Oracle数据库 (11)
- 项目管理工具 (12)
- 数据报表技术 (4)
- 图像处理技术 (10)
- 其它综合技术 (13)
- 权限管理 (1)
- MyBatis (1)
- 网络安全 (6)
- IO (21)
- PostgreSQL (2)
- Eclipse RCP (1)
- GWT (1)
- 算法 (3)
- Storm (2)
- zookeeper (3)
- 消息 (1)
最新评论
-
bukebuhao:
已解决,打开文件太多。ulimit -n 上次临时生效后再次s ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
bukebuhao:
ds重启后启动不了。报错信息如下,请大神帮助[2018-08- ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
墨上清:
感谢,看完有了一个完整的知识网络。
Spring MVC 教程,快速入门,深入分析 -
云卷云舒灬:
谢谢,学到很多
Spring MVC 教程,快速入门,深入分析 -
luozhy:
非常感谢非常感谢
Project Web Access ActiveX控件 安装
一对一 ,例如"人" 对 "身份证"的对应关系
第一种情况: IdCard类的ID 既是主键又是外键
关系请看下图, (图中的配置, 写反了 ,不要参考, 正确的配置请看下面的代码)
Person类:
package dao.po; /** * @author zl 人类 * */ public class Person { private int id; //ID private String name; //姓名 private IdCard idCard; //身份证(对象) }
IdCard类:
package dao.po; /** * @author zl 身份主类 * */ public class IdCard { private int id; //ID private String address; //地址 private Person person; //身份证的主人 }
两个XML:
<?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="dao.po"> <class name="Person"> <id name="id"> <generator class="native"/> </id> <property name="name" not-null="true" length="255" column="`name`"/> <!-- 这里做一对一映射 --> <!-- 没什么好说的,就是一 one-to-one --> <one-to-one name="idCard" ></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"> <hibernate-mapping package="dao.po"> <class name="IdCard" table="id_card"> <id name="id"> <!-- 注意: --> <!-- 本类的id 既是主键,又是外键 --> <!-- IdCard对象的是从对象, Person是主对象, 先有主,后有从. --> <generator class="foreign"> <!-- 此处的person是IdCard类的一个属性 --> <param name="property">person</param> </generator> </id> <property name="address" not-null="true" length="255" column="`address`"/> <!-- 此处的person是IdCard类的一个属性 --> <!-- constrained="true" 对生成的数据表产生约束,id_card表的id既是主键,又是外键 --> <!-- constrained="false" 表结构上没有约束, 取何值对对象关系没影响,只是对表结构有影响--> <one-to-one name="person" constrained="true"/> </class> </hibernate-mapping>
保存与查询:
package dao; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.Transaction; import dao.po.IdCard; import dao.po.Person; public class One2One { /** * @param args */ public static void main(final String[] args) { add(); final IdCard c1 = query(5); System.out.println(c1.getPerson().getName()); } /** * 保存 */ public static void add() { final Person p1 = new Person(); p1.setName("小明"); final IdCard c1 = new IdCard(); c1.setAddress("北京市海淀区上地"); p1.setIdCard(c1); //建立关联(不能少) c1.setPerson(p1); //建立关联(不能少) Session session = null; try { session = HibernateUtil.getSeesion(); final Transaction tx = session.beginTransaction(); //session.save(p1); // session.save(c1); //身份证是从对象依赖于主对象, "身份证"依赖于"人", //保存 c1 , 也会自动保存 他依赖的p1,前题是c1 与p1要关联. tx.commit(); //SQL 如下: //Hibernate: insert into Person (`name`) values (?) //Hibernate: insert into id_card (`address`, id) values (?, ?) //虽然只执行了session.save(c1) , 但有两个insert } finally { if (session != null) { session.close(); } } } /** * 查询 身份证, * * @param id * @return */ public static IdCard query(final int id) { Session session = null; try { session = HibernateUtil.getSeesion(); final IdCard c1 = (IdCard) session.get(IdCard.class, id); Hibernate.initialize(c1.getPerson()); return c1; //SQL 如下: //Hibernate: select idcard0_.id as id3_0_, idcard0_.`address` as address2_3_0_ from id_card idcard0_ where idcard0_.id=? //Hibernate: select person0_.id as id2_1_, person0_.`name` as name2_2_1_, idcard1_.id as id3_0_, idcard1_.`address` as address2_3_0_ from Person person0_ left outer join id_card idcard1_ on person0_.id=idcard1_.id where person0_.id=? //注意person表又连了id-card表 } finally { if (session != null) { session.close(); } } } }
---------------------------------------------------------------------------------------------------------------------------------------------------
第二种情况: IdCard类的ID 只是主键, IdCard类多一属性 person_id做 外键,指向Person类的主键.
这种情况有点像 多对一 .
关系如下图:
两个配置文件 内容如下, 只抓了图, 没写代码, 很简单的,不用写了, 看看图就行了 . (图中的配置是正确的)
评论
3 楼
msi110
2010-01-20
楼主对一对一的延迟加载有研究吗?
2 楼
fisherhe
2009-10-12
一直对几个hibernate的关联关系比较晕,
你的图解很详细,看起来很久豁然开朗了。
你的图解很详细,看起来很久豁然开朗了。
1 楼
keer2345
2009-04-28
谢谢, 只是不大明白,如果在实际应用中如果有一对一的关系的话,一起放在一个表里面不就可以了吗
发表评论
-
Hibernate二级缓存 ---- 最佳实践
2010-11-08 10:17 39286作者:赵磊 博客:ht ... -
Hibernate--泛型DAO
2010-06-27 19:49 5055泛型DAO(翻译) http://www.iteye.com ... -
Hibernate--空位
2010-06-27 15:41 1797原文章已合并整理到: http://elf8848.itey ... -
Hibernate二级缓存 ---- 入门示例
2010-06-27 15:34 4151一. 我们使用oscache来演示 , 引入oscache的j ... -
Hibernate 操作Blob Clob
2010-06-14 16:50 5251Photo.java import java.sql.Bl ... -
Hibernate ---- 控制日志
2010-06-06 11:46 3043Hibernate版本 3.3或3.4 Hibernate ... -
Hibernate悲观锁定与乐观锁定
2010-05-17 15:08 2242悲观锁定 由数据库方面实现. 可见:Hibernate悲观锁 ... -
Hibernate懒加载深入分析
2010-05-14 11:22 8283[size=small] ------------------ ... -
Hibernate批量操作(JDBC批量操作)
2009-03-30 14:52 8402部分内容转自 :http://ga ... -
Hibernate分页查询与泛型
2009-03-26 19:03 7358JE有两篇文章,关于分页查询 与泛型 的,写的很好.这里收藏一 ... -
20 Hibernate 1+N问题的原理与解决
2009-03-04 09:44 13076什么时候会遇到1+N的问题? 前提:Hibernate默认表 ... -
19 Criteria查询,DetachedCriteria离线查询 --做综合查询
2009-03-04 09:35 3732通过Session得到Criteria类的对象 /** ... -
空位空位
2009-03-03 10:22 2334空位空位空位空位 -
17 继承(四)每一个具体的类 映射到一张表
2009-03-02 13:54 2297类(Person) , 男人(Men)继 ... -
16 继承(三)(把前面14,15讲的情况结合起来)
2009-03-02 13:30 2092人类(Person) , 男人(Men)继承"人& ... -
15 继承(二)(每个子类扩展的属性单独保存在一张表中)
2009-03-02 13:07 2069人类(Person) , 男人(Men)继承" ... -
14 继承(一)(整个继承树映射到一张表)
2009-03-02 11:00 2226人类(Person) , 男人(Men)继承" ... -
13 级联和关系维护(Cascade 和Inverse)
2009-03-01 17:58 3040Cascade用来说明当对主对象进行某操作时, 是否对其关联的 ... -
12 映射-- 集合类的映射(Set,List,Map,Array)
2009-03-01 16:18 2622部门类Department , 他有 empa1, emp ... -
11 映射-- 组件映射(人类与姓名类)
2009-03-01 15:26 2361User类: 注意他的name属性 package ...
相关推荐
9. **PDF文件**:“一种社交网络账号映射模型训练方法及映射方法和系统.pdf”很可能是详细的技术文档,涵盖了模型的设计原理、实现步骤、实验结果和可能遇到的问题及解决方案。 以上是对该压缩包文件内容的初步解析...
双线性映射是一种特殊的映射,它将两个特定群的元素映射到一个中间群,同时保持一些特定的性质,比如双线性性。在PBC库中,可以找到实现不同域参数下的双线性配对函数,例如Weierstrass曲线上的 Tate配对或Ate配对。...
而在数字签名领域,双线性映射的利用,可以生成一种不可伪造的电子签名,这对于确保消息的完整性和验证发送者的身份至关重要。 综上所述,双线性映射的概念不但在数学理论上具有深远的意义,其在实际应用中的作用也...
本文介绍的一种新的基于身份的认证加密方案结合了传统对称加密的优势与基于身份的公钥加密的特点,以提高加密/解密的效率并降低通信成本。该方案的安全性建立在双线性Diffie-Hellman计算问题的难度以及单向哈希函数...
文章中提到的图像二值化处理公式是一个基本的二值化处理算法,它通过设定一个阈值T,将图像像素点的灰度值与背景图像灰度值的差分进行比较,根据结果将像素点转换为黑白两种状态。这种方法对于图像的进一步处理(如...
因此,提出一种适用于天地一体化网络的身份认证方案显得尤为迫切。 赵国锋等人提出的这一方案,通过引入双线性配对技术,实现了无需第三方参与的双向认证。这意味着网络中的任意两个实体在进行通信前,都可以互相...
在IT行业中,步态识别是一种生物特征识别技术,它利用人体行走时的步态特征来辨别个体身份。这种技术在安全监控、智能家居、医疗健康等多个领域有着广泛的应用潜力。"行业分类-设备装置-基于步态轨迹曲线特征的人体...
模糊身份基加密(Fuzzy IBE)是一种加密技术,它扩展了传统的身份基加密(IBE)概念,允许一定程度的错误容忍或模糊性。在传统的IBE系统中,加密是基于接收者的精确身份,而在模糊IBE中,加密可以针对一组近似或模糊...
FTP的主要用途是在两个主机之间传输文件,其中一个通常作为服务器,另一个作为客户端。通过FTP,用户可以上传文件到服务器或将文件从服务器下载到本地计算机。 FTP协议工作于TCP/IP协议之上,采用客户机/服务器模式...
文章提出了一套检测算法来应对这些冲突,确保角色映射的安全性,具体包括两种主要类型的冲突:角色冲突和权限冲突。 角色冲突是指外域用户的角色在本域中可能存在同名但权限不同的情况,这可能导致用户在不自知的...
基于身份的指定确认者签名是一种数字签名技术,它依赖于椭圆曲线上的双线性对来构造签名算法。在这一方案中,签名的验证不仅仅依赖于公钥和签名本身,还需要一个指定的确认者(通常为第三方)参与验证过程。这种签名...
SSH隧道是一种利用SSH协议创建的安全通道,它可以保护数据在两端之间的传输不受拦截。通过在PuTTY中配置SSH隧道,可以实现以下几种常见的应用场景: ##### 1. **创建直接SSH隧道** - 目标:允许本地计算机通过SSH...