Hibernate4一对一关系映射(共享主键方式)
来源:互联网 发布:汽车油耗计算器软件 编辑:程序博客网 时间:2024/06/05 06:23
博客分类:
Hibernate
示例:一个人(person) 住一个地址(address),一个地址有一个人。
- public class Person {
- private Integer id;
- private String name;
- private Address address;
- //getter and setter
- }
- public class Address {
- private Integer id;
- private String detail;
- private Person person;
- //getter and setter
- }
用XML映射
- <hibernate-mapping package="org.monday.hibernate4.domain">
- <class name="Person" table="tbl_person">
- <id name="id">
- <generator class="identity" />
- </id>
- <property name="name" />
- <one-to-one name="address" class="Address" />
- </class>
- </hibernate-mapping>
- <hibernate-mapping package="org.monday.hibernate4.domain">
- <class name="Address" table="tbl_address">
- <id name="id">
- <generator class="foreign">
- <param name="property">person</param>
- </generator>
- </id>
- <property name="detail" />
- <one-to-one name="person" class="Person" constrained="true" />
- </class>
- </hibernate-mapping>
1、Address的主键生成策略使用foreign方式,表示通过外键与Person对象共享标识符属性。
2、<one-to-one>标签的constrained属性设置为true,表示约束Address对象的标识符属性值必须与
person属性所对应的持久化对象的标识符属性相同。
用@Annotation映射
- @Entity
- @Table(name = "tbl_person")
- public class Person {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Integer id;
- private String name;
- @OneToOne
- @PrimaryKeyJoinColumn
- private Address address;
- // getter and setter
- }
- @Entity
- @Table(name = "tbl_address")
- public class Address {
- @Id
- @GeneratedValue(generator = "myForeignGenerator")
- @GenericGenerator(name = "myForeignGenerator",
- strategy = "foreign",
- parameters = @Parameter(name = "property", value = "person"))
- private Integer id;
- private String detail;
- @OneToOne(optional = false)
- @PrimaryKeyJoinColumn
- private Person person;
- // getter and setter
- }
@OneToOne的optional=false表示在address这端添加一个外键约束
@PrimaryKeyJoinColumn定义了一对一关联
测试代码
- Person person = new Person();
- person.setName("monday");
- Address address = new Address();
- address.setDetail("shanghai");
- person.setAddress(address);
- address.setPerson(person);
- session.save(person);
- session.save(address);
SQL schema
- Hibernate:
- create table tbl_address (
- id integer not null,
- detail varchar(255),
- primary key (id)
- )
- Hibernate:
- create table tbl_person (
- id integer not null auto_increment,
- name varchar(255),
- primary key (id)
- )
- Hibernate:
- alter table tbl_address
- add index FKD0C46473E8935A42 (id),
- add constraint FKD0C46473E8935A42
- foreign key (id)
- references tbl_person (id)
- Hibernate:
- insert
- into
- tbl_person
- (name)
- values
- (?)
- Hibernate:
- insert
- into
- tbl_address
- (detail, id)
- values
- (?, ?)
0 0
- Hibernate4一对一关系映射(共享主键方式)
- Hibernate4一对一关系映射(共享主键方式)
- 第九章 关系映射 一对一关系 共享主键方式实现一对一
- Hibernate4一对一关系映射(唯一外键方式)
- 主键共享方式和外键方式一对一双向关系映射(参考张龙老师的例子)
- Hibernate4-6 映射一对一关联关系
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- 一对一关联关系(基于外键映射和基于主键映射两种方式)
- Hibernate基于主键的一对一映射关系
- hibernate实现一对一关系映射(基于主键)
- 基于主键映射的 一对一关系
- hibernate映射总结详解: 按主键映射一对一关联关系
- hibernate之映射关系一对一(2种方式)
- Hibernate之关联关系映射(一对一主键映射和一对一外键映射)
- 映射一对一共享主键 和唯一外键
- hibernate5(13)注解映射[5]一对一共享主键关联
- Hibernate关系映射(3)_一对一单向主键关联
- Hibernate关系映射(4)_一对一双向主键关联
- sobel算子
- MyBatis 多表联合查询及优化
- python笔记---需求文件requirements.txt的创建及使用
- Oracle 的入门心得
- iOS touch事件单击双击区分响应
- Hibernate4一对一关系映射(共享主键方式)
- 34. Search for a Range
- [LeetCode] 26. Remove Duplicates from Sorted Array
- c++多线程编程
- ubuntu安装wmware tools
- Java层Binder全解析。
- Unity Shader-后处理:屏幕水波效果
- 关于子线程中销毁主线程窗口的问题
- fread与file_get_contents读取文件的区别