一对一关联有(主键关联)单向关联和双向关联和唯一外键关联三种模式
首先了解单向关联.假设有User(客户)和(Accounts )银行帐号管理两个对象.一个用户只可能有一个帐号.说明这个客户持有一个银行帐号.所以Accounts的主键自动生成,而User的主键来源于Accounts.关键点就是User.hbm.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> <class name="net.knight.hibernate.User" table="t_user"> <id name="id"> <!-- User的主键来源于Accounts,等于是共享了Accounts的主键 --> <generator class="foreign"> <param name="property">accounts</param> </generator> </id> <property name="name"/> <!-- 引导hibernate怎么加载关联对象,默认根据主键加载, cascade这个属性表明当前的主键还是一个外键.他加入了外键约束 --> <one-to-one name="accounts" cascade="true" /> </class> </hibernate-mapping>
双向只需要在Accounts.hbm.xml中加入<one-to-one>标签,输出SQL的时候hibernate会使用join将两张表都查询出来.
而一对一唯一外键关联和多对一关联其实是一样的.但是是属于一个特例.只要设置unique属性为true.限制对象不允许重复就可以了.
整个Hibernate的对象关系映射主要包括如下种.
多对一关联映射
一对一主键关联单向映射
一对一主键关联双向映射
一对一唯一外键关联单向映射
一对一唯一外键关联双向映射
一对多单向关联映射
一对多双向关联映射
多对多单向关联映射
多对多双向关联映射
用到的时候再查资料.基本原理一致,学习起来应该不困难.