第十章 基于Annotation的关系映射 一对一
2013-06-09 21:05
218 查看
如果下面部分内容有不明白的可以查找:
基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911
基于映射文件共享主键方式实现一对一:http://blog.csdn.net/p_3er/article/details/9004419
基于映射文件唯一外键式实现一对一:http://blog.csdn.net/p_3er/article/details/9004471
测试与使用和基于映射文件基本一样:http://blog.csdn.net/p_3er/article/details/9004419
测试与使用和基于映射文件基本一样:
http://blog.csdn.net/p_3er/article/details/9004471
基于Annotation的关系映射 前期准备:http://blog.csdn.net/p_3er/article/details/9061911
基于映射文件共享主键方式实现一对一:http://blog.csdn.net/p_3er/article/details/9004419
基于映射文件唯一外键式实现一对一:http://blog.csdn.net/p_3er/article/details/9004471
1、共享主键方式:
Person:
@Entity @Table(name = "person", catalog = "hibernate") public class Person implements java.io.Serializable { private Integer id; private String name; private IdCard idCard; public Person() { } @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", nullable = false, length = 45) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToOne(cascade = CascadeType.ALL) @PrimaryKeyJoinColumn // 这个注解只能写在主(生成ID)的一端,指向从表 public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } }
IdCard:
@Entity @Table(name = "id_card", catalog = "hibernate") public class IdCard implements java.io.Serializable { private Integer id; private Person person; private String cardNo; public IdCard() { } @Id @GenericGenerator(name = "abc", strategy = "foreign", parameters = { @Parameter(name = "property", value = "person") }) @GeneratedValue(generator = "abc") @Column(name = "id", unique = true, nullable = false) /* 与映射文件相比较: <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="foreign"> <param name="property">person</param> </generator> </id> */ public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "id", unique = true, nullable = false, insertable = false, updatable = false) public Person getPerson() { return this.person; } public void setPerson(Person person) { this.person = person; } @Column(name = "card_no", nullable = false, length = 45) public String getCardNo() { return this.cardNo; } public void setCardNo(String cardNo) { this.cardNo = cardNo; } }
测试与使用和基于映射文件基本一样:http://blog.csdn.net/p_3er/article/details/9004419
2、唯一外键方式
Person:
@Entity @Table(name = "person", catalog = "hibernate") public class Person implements java.io.Serializable { private Integer id; private String name; private IdCard idCard; public Person() { } @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", nullable = false, length = 45) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToOne(cascade = CascadeType.ALL,mappedBy="person") //<one-to-one name="idCard" property-ref="person"/> 与之前的映射文件比较 //当指定person中的mappedBy后,关系只能被idcard来主动维护 public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } }
IdCard:
@Entity @Table(name = "id_card", catalog = "hibernate") public class IdCard implements java.io.Serializable { private Integer id; private Person person; private String cardNo; public IdCard() { } @Id @GeneratedValue @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "person_id", unique = true) /* 比较: <many-to-one name="person" column="person_id" unique="true" /> */ public Person getPerson() { return this.person; } public void setPerson(Person person) { this.person = person; } @Column(name = "card_no", nullable = false, length = 45) public String getCardNo() { return this.cardNo; } public void setCardNo(String cardNo) { this.cardNo = cardNo; } }
测试与使用和基于映射文件基本一样:
http://blog.csdn.net/p_3er/article/details/9004471
相关文章推荐
- 第十章 基于Annotation的关系映射 一对一
- 第十章 基于Annotation的关系映射 多对一与一对多
- 第十章 基于Annotation的关系映射 多对多
- 第十章 基于Annotation的关系映射 多对多
- 第十章 基于Annotation的关系映射 多对一与一对多
- 第十章 基于Annotation的关系映射 前期准备
- Hibernate学习——(六)基于Annotation的一对一双向外键映射
- Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式
- 基于主键映射的 一对一关系
- Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式 双向关联和单向关联的区别
- Hibernate关系映射 --- 一对一实例分析(双向关联,是基于主键的)
- Hibernate 基于注解的方式 实现的关系映射案例(一对一关系,一对多关系,多对多关系)
- MyBatis框架基于Annotation注解的一对一关联映射
- hibernate笔记--基于主键的单(双)向的一对一映射关系
- hibernate基于Annotation的一对一外键映射
- Hibernate关系映射(一)一对一单向外键关联@OneToOne Annotation方式
- Hibernate关系映射(一) 基于外键的单向一对一
- [原创]java WEB学习笔记85:Hibernate学习之路-- -映射 一对一关系 ,基于主键方式实现
- Hibernate关系映射(二) 基于外键的双向一对一
- hibernate实现一对一关系映射(基于外键)