hibernate的关联关系----一对一单向关联之外键关联

实体类:

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在数据库中形成一对一的主外键关系

猜你喜欢

转载自gaoquanyang.iteye.com/blog/1074197