Hibernate中的一对一映射关系,这里以用户和用户信息为例,为大家介绍Hibernate一对一的关系。
在开始阅读实例之前要明确以下几点:
1.先创建一个数据库,通过Hibernate创建数据表,hibernate.cfg.xml文件中加入如下属性。
<property name="hibernate.hbm2ddl.auto">update</property>
2.创建主键的方式是uuid2,所以id的类型是String型,在数据库中是varchar型。
3.通过在user.hbm.xml中设置cascade="all"
即:级联设置成适用所有级联。
4.通过在userInfo.hbm.xml中设置cascade="all" constrained="true"
设置所有级联和给userInfo表设置一个外键。
1.实体类代码如下:
User.java
public class User {
private String id;
private String username;
private String pwd;
private UserInfo userInfo;
// --------------此处已省略所有的get方法和set方法---------
}
UserInfo.java
public class UserInfo {
private String id;
private String phone;
private String email;
private User user;
// --------------此处已省略所有的get方法和set方法---------
}
2.配置文件
<1>.hibernate.cfg.xml文件里面加入配置小配置文件,加入如下代码。
<mapping resource="com/lanou/test/mapping/user.hbm.xml"></mapping>
<mapping resource="com/lanou/test/mapping/userInfo.hbm.xml"></mapping>
<2>.配置user.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.lanou.test.beans.User" table="tb_user">
<id name="id" >
<generator class="uuid2"></generator> <!-- id(主键)的生成规则 -->
</id>
<-- 映射实体类的属性 -->
<property name="username"></property>
<property name="pwd"></property>
<-- 配置一对一关系 -->
<!-- cascade 级联 name:要映射的配置文件名-->
<one-to-one name="userInfo" class="com.lanou.test.beans.UserInfo" cascade="all"></one-to-one>
</class>
</hibernate-mapping>
<3>.配置userInfo.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.lanou.test.beans.UserInfo" table="tb_userInfo">
<id name="id">
<generator class="foreign">
<param name="property">user</param>
</generator> <!-- id(主键)的生成规则 -->
</id>
<-- 映射实体类的属性 -->
<property name="phone"></property>
<property name="email"></property>
<-- 配置一对一关系 -->
<!-- cascade 级联 name:要映射的配置文件名 constrained:约束-->
<one-to-one name="user" class="com.lanou.test.beans.UserInfo" cascade="all" constrained="true" ></one-to-one>
</class>
</hibernate-mapping>
3.写测试类 TestMain.java
public class TestMain {
public static void main(String[] args) {
Configuration config = new Configuration().configure();
SessionFactory sf = config.buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
UserInfo userInfo = new UserInfo();
user.setPwd("aaaa");
user.setUsername("cccc");
userInfo.setEmail("123456@sina.com");
userInfo.setPhone("13669369170");
user.setUserInfo(userInfo);
userInfo.setUser(user);
session.save(user);
tx.commit();
System.exit(0);
}
}
此次分享就此结束,如有不足,敬请留言!