实体类:
Address: public class Address implements Serializable{ private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Person: public class Person implements Serializable{ private Long id; private String name; private Address address; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
hbm:
Address hbm: <hibernate-mapping> <class name="com.model.o2o.fk.Address" table="t_address" schema="yang"> <id name="id" type="java.lang.Long"> <column name="ID" scale="0" /> <generator class="sequence" /> </id> <property name="name" type="java.lang.String"> <column name="name" not-null="true" /> </property> </class> </hibernate-mapping> Person hbm: <hibernate-mapping> <class name="com.model.o2o.fk.Person" table="t_person" schema="yang"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" type="string"> <column name="name"/> </property> <many-to-one name="address" column="addressId" unique="true" not-null="true"/> </class> </hibernate-mapping>
sql:
drop table yang.t_address cascade constraints drop table yang.t_person cascade constraints drop sequence hibernate_sequence create table yang.t_address (ID number(19,0) not null, name varchar2(255 char) not null, primary key (ID)) create table yang.t_person (id number(19,0) not null, name varchar2(255 char), addressId number(19,0) not null unique, primary key (id)) alter table yang.t_person add constraint FK785BED80C96D476E foreign key (addressId) references yang.t_address create sequence hibernate_sequence
hibernate API 写道
基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。
<many-to-one name="address" column="addressId" unique="true" not-null="true"/>
这两个表之间是通过主外键关系进行关联映射,其中t_address是主键表,t_person是外键表。和传统的的主外键关系不同的是,t_person表中的addressId具有唯一约束,(addressId number(19,0) not null unique),这样t_person表中的addressId则只能和t_address表中的id在数据库中形成一对一的主外键关系