Hibernate子表更新父对象

时间:2017-02-06 13:39:08

标签: java hibernate

我有如下表格,

作用:

Role_Id    Role_Name
201        Manager
202        Supervisor

用户:

User_ID   User_Name  Role_Id
1         John       201
2         Peter      202 
3         Raj        202

我为两个表创建了POJO和hibernate映射文件。

映射文件:

//RoleVO
<class name="RoleVO" table="tbl_Role">
        <id name="roleId" column="role_Id" >
            <generator class="identity"/>
        </id>   
        <property name="roleName" column="Role_Name" />
</class>

//UserVO
<class name="UserVO" table="tbl_User">
        <id name="userId" column="user_Id" >
            <generator class="identity"/>
        </id>   
        <property name="userName" column="User_Name" />
        <many-to-one name="Role" class="RoleVO" column="Role_Id"/>
</class>

当我通过hibernate在User Table中插入用户详细信息时,我应该获得Role Ref并使用User对象进行设置,还是直接添加&#34; Role Id&#34;在用户表中。

例如,

//First approach:

UserVO usr = new UserVO();
usr.serUserName("Kumar");
usr.setRoleId(202);
session.save(usr);

or

//Second Approach:

UserVO usr = new UserVO();
usr.serUserName("Kumar");
RoleVO role = session.get(RoleVO.class, 202);
usr.setRole(role);
session.save(usr);

哪种方法最好?第一或第二?

1 个答案:

答案 0 :(得分:0)

我假设用户角色关联是多对一和单向关联。

RoleVO实例中设置UserVO对象是使用hibernate作为映射文件指示在数据库中插入UserVo对象的唯一方法:

<many-to-one name="Role" class="RoleVO" column="Role_Id"/>

因此,要在数据库中插入用户详细信息对象,您可以编写:

UserVO user = new UserVO();
//Set user info
  ...
RoleVO role = (RoleVO) session.get(RoleVO.class, 202);
user.setRole(role);
session.save(user);

我建议您查看此hibernate tutorial以获取更多信息。