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

   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);
    }

}

此次分享就此结束,如有不足,敬请留言!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值