您的位置:首页 > 其它

Hibernate4一对一关系映射(共享主键方式)

2016-03-21 18:12 239 查看
示例:一个人(person) 住一个地址(address),一个地址有一个人。

Java代码


public class Person {

private Integer id;
private String name;

private Address address;

//getter and setter
}

Java代码


public class Address {

private Integer id;
private String detail;

private Person person;

//getter and setter
}

用XML映射

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>

Xml代码


<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映射

Java代码


@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
}

Java代码


@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定义了一对一关联

测试代码

Java代码


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

Sql代码


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
(?, ?)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: