示例:一个人(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" /> <many-to-one name="address" class="Address" column="address_id" unique="true"/> </class> </hibernate-mapping>
<hibernate-mapping package="org.monday.hibernate4.domain"> <class name="Address" table="tbl_address"> <id name="id"> <generator class="identity"/> </id> <property name="detail" /> <one-to-one name="person" class="Person" property-ref="address" /> </class> </hibernate-mapping>
1、 tbl_address 表中使用外键来完成一对一关联,限制多方最多只能有一条记录参考到一方,
这是多对一的一个特列。所以设置 <many-to-one> 的 unique 的属性为 true 。
2、 <one-to-one> 的 property-ref 属性 指定引用关联类的属性。
用@Annotation映射
@Entity @Table(name = "tbl_person") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; @OneToOne @JoinColumn(name = "address_id", unique = true) private Address address; // getter and setter }
@Entity @Table(name = "tbl_address") public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String detail; @OneToOne(mappedBy = "address") private Person person; // getter and setter }
测试代码
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: alter table tbl_person drop foreign key FKACCC46F65DCD05A8 Hibernate: drop table if exists tbl_address Hibernate: drop table if exists tbl_person Hibernate: create table tbl_address ( id integer not null auto_increment, detail varchar(255), primary key (id) ) Hibernate: create table tbl_person ( id integer not null auto_increment, name varchar(255), address_id integer unique, primary key (id) ) Hibernate: alter table tbl_person add index FKACCC46F65DCD05A8 (address_id), add constraint FKACCC46F65DCD05A8 foreign key (address_id) references tbl_address (id) Hibernate: insert into tbl_person (name, address_id) values (?, ?) Hibernate: insert into tbl_address (detail) values (?) Hibernate: update tbl_person set name=?, address_id=? where id=?
这里多了一条update语句,是因为插入顺序决定的。
若这样
session.save(address); session.save(person);
就不会有update语句了。
相关推荐
博文链接:https://shaqiang32.iteye.com/blog/201311
博文链接:https://shaqiang32.iteye.com/blog/201312
博文链接:https://llying.iteye.com/blog/220804
hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向
Hibernate一对一外键映射实例,里面包含源程序,测试程序,映射文档
个人的很详细的Hibernate一对一映射配置详解,对初学者有帮助!
博文链接:https://llying.iteye.com/blog/220807
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
NULL 博文链接:https://12345678.iteye.com/blog/723871
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
Hibernate 一对一外键单向关联 Hibernate 一对一主键单向关联 Hibernate 一对一连接表单向关联 Hibernate 一对多外键单向关联 Hibernate 一对多连接表单向关联 Hibernate 多对一外键单向关联 Hibernate 多对一连接...
http://blog.csdn.net/e421083458/article/details/8794127 该源码为Hibernate教程配套源码
Hibernate高级映射的几个单向关系,单向一对一(共享主键方式、唯一外键方式),单向多对一,单向一对多,单向多对多。
hibernate一对一唯一外键关联映射(单向关联Person---->IdCard) 10 hibernate一对一唯一外键关联映射(双向关联Person<---->IdCard) 11 session flush测试(hibernate_session_flush) 12 hihernate一对多关联映射...
NULL 博文链接:https://lijunabc.iteye.com/blog/438972
011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush 014 一对多关联映射 单向 015 一对多关联映射 双向 016 多对多关联映射 单向 017 多对多关联映射 双向 018 关联映射文件中...