您的位置:首页 > 其它

Hibernate中一对一映射详细解析(内含实例)

2017-10-25 22:52 423 查看
   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);
}

}


此次分享就此结束,如有不足,敬请留言!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: