09hibernate hibernate的关系映射之OneToOne(重点)
2014-07-03 16:44
369 查看
关系映射指的是对象之间的关系,并不是指数据库的关系 一对一 (1)单向外键关联: a.annotation版本: public class Husband { private int id; private String name; @OneToOne @JoinColumn(name="wifeId")//指定外键名 private Wife wife; //只有在Husband表中有一个外键指向Wife表 } public class Wife { private int id; private String name; } b.xml版本: <class name="com.hibernate.StuIdCard"> <id name="id"> <generator class="native"></generator> </id> <many-to-one name="student" column="studentId" unique="true"></many-to-one> //unique="true"指明StuIdCard必须唯一,所以此时是一对一关联 //column="studentId"指明外键名称 </class> (2)单向主键关联:(不重要) a.annotation版本: public class Husband { private int id; private String name; @OneToOne @PrimaryKeyJoinColumn private Wife wife; } public class Wife { private int id; private String name; } b.xml版本: <class name="com.hibernate.StuIdCard"> <id name="id"> <generator class="native"> <param name="property">student</param> </generator> </id> <one-to-one name="student" constrained="true"></one-to-one> </class>//constrained="true"创建主键关联关系,主键生成参考Student的主键 (3)双向外键关联: a.annotation版本://规律:凡是双向关联,必设mappedBy public class Wife { private int id; private String name; @OneToOne(mappedBy="wife") private Husband husband; //mappedBy="wife" 被Husband类的wife属性做了映射, //即Husband类的wife属性才是主导,可以忽略此处的设置 //此时Wife表中不再生成husband字段 } public class Husband { private int id; private String name; @OneToOne private Wife wife; }//两个类中都有指向对方的外键 b.xml版本: StuIdCard的xml不变,还需增加 <class name="com.hibernate.Student"> <id name="id"> <generator class="native"></generator> </id> <one-to-one name="stuIdCard" property-ref="student"></one-to-one> //此时只在stuIdCard中生成外键指向Student类 //property-ref相当于mappedBy,stuIdCard类的student属性作为主导 </class> (4)双向主键关联:(不重要) a.annotation版本: public class Husband { private int id; private String name; @OneToOne @PrimaryKeyJoinColumn private Wife wife; } public class Wife { private int id; private String name; @OneToOne @PrimaryKeyJoinColumn private Husband husband; } b.xml版本: StuIdCard的xml文件不变 <class name="com.hibernate.Student"> <id name="id"> <generator class="native"></generator> </id> <one-to-one name="stuIdCard" property-ref="student"></one-to-one> </class> 注意:OneToOne的单向和双向在数据库没有区别 在java程序里的区别是: 双向关联的时候wife对象通过它的husband属性可以找到对应的关联对象, 而单向找不到
相关文章推荐
- 11hibernate hibernate的关系映射之OneToMany和ManyToOne(重点)
- Nhibernate中One—to—One关系映射详解
- NHibernate学习笔记(二):one-to-one关系映射
- Hibernate关系映射(二)一对一双向外键关联@OneToOne Annotation方式
- JPA中one-to-one关系的单向映射示例
- JPA中one-to-one关系的单向映射示例
- Hibernate 、多表关联映射-多对一关系(many-to-one)
- Hibernate关系映射(四)一对多单向关联@OneToMany Annotation方式
- Hibernate One-to-One Mappings 一对一关系映射
- JPA总结——实体关系映射(一对一@OneToOne)
- Mybatis 一对一(OneToOne)关系映射__INSERT
- 用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- 用MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- [导入]用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- Mybatis 一对多(OneToOne)关系映射
- NHibernate学习笔记(二):one-to-one关系映射
- Mybatis 一对多(OneToOne)关系映射
- hibernate关系映射--双向一对一@OneToOne
- 12hibernate hibernate的关系映射之ManyToMany(重点)