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;
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;
相关文章推荐
- Hibernate 第十讲 表关联关系(三)单向项一对一主键关联
- Hibernate之对象关系映射02一对一单向主键关联
- Hibernate基于主键和外键的单向一对一的关联映射
- hibernate一对一单向主键关联_Annotation
- hibernate映射之主键单向一对一
- Hibernate主键一对一关联映射实例【xml和注解版本@OneToOne@JoinColumn(name="wifeId")--主键单向】(十二)
- Hibernate关系映射(3)_一对一单向主键关联
- Hibernate映射(一)------单向一对一主键关联
- Hibernate一对一外键单向关联关系
- Hibernate关系映射(5)_一对一单向联合主键关联
- hibernate 关联关系 一对一 主键关联
- Hibernate的主键如果为两个参数时的问题一对一单向主键映射注解方式(十四)
- Hibernate关联关系映射-----单向一对一映射配置
- hibernate一对一单向外键关联_Annotation_联合主键
- Hibernate关联关系之一对一(主键关联)
- Hibernate 第十讲 表关联关系(四)双向一对一主键关联
- Hibernate:一对一单向主键关联
- Hibernate关联关系映射-----单向一对一映射配置
- Hibernate 一对一主键单向关联
- Hibernate 第十讲 表关联关系(五)一对一联合主键关联