您的位置:首页 > 其它

Hibernate一对一主键单向关联关系

2015-01-14 16:19 246 查看
实体People和Address(省略get,set方法):

public class People {
private long id;
private String name;
private Address addressFk;

}

public class Address {
private long id;
private String city;

}

People.hbm.xml

<hibernate-mapping package="com.model">
<class name="People" table="t_people">
<id name="id" column="person_id">
<!--基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键-->
<generator class="foreign">
<!--关联持久化类的属性名-->
<param name="property">addressFk</param>
</generator>
</id>
<property name="name" column="people_name"></property>
<!--1-1关联-->
<one-to-one name="addressFk" constrained="true"></one-to-one>
</class>
</hibernate-mapping>

Address.hbm.xml

<hibernate-mapping package="com.model">
<class name="Address" table="t_address">
<id name="id" column="address_id" >
<generator class="identity"></generator>
</id>
<property name="city" column="address_city"></property>

</class>
</hibernate-mapping>

测试代码片断:

   People p=new People();
Address a=new Address();
p.setName("张三");
a.setCity("徐州");
p.setAddressFk(a);

  //注意以下顺序

1)

session.save(p);
session.save(a);

Hibernate: insert into t_address (address_city) values (?)
Hibernate: insert into t_people (people_name, person_id) values (?, ?)

2)

session.save(a);
session.save(p);

Hibernate: insert into t_address (address_city) values (?)
Hibernate: insert into t_people (people_name, person_id) values (?, ?)

3)

//session.save(a);
session.save(p);

Hibernate: insert into t_address (address_city) values (?)
Hibernate: insert into t_people (people_name, person_id) values (?, ?)

4)

   session.save(a);
//session.save(p);

Hibernate: insert into t_address (address_city) values (?)
Hibernate: insert into t_people (people_name, person_id) values (?, ?)

以上4种方法都可以。

生成表结构:

CREATE TABLE `t_address` (
`address_id` bigint(20) NOT NULL AUTO_INCREMENT,
`address_city` varchar(255) DEFAULT NULL,
`address_country` varchar(255) DEFAULT NULL,
PRIMARY KEY (`address_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

CREATE TABLE `t_people` (
`people_id` bigint(20) NOT NULL,
`people_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`people_id`),
CONSTRAINT `FK_2r1jj4icg465utspk9d546de6` FOREIGN KEY (`people_id`) REFERENCES `t_address` (`address_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: