如何在spring / hibernate中处理来自单个表单的两个数据库插入?

时间:2012-05-25 05:06:10

标签: spring hibernate spring-mvc mapping

我有3个模型类,

User.java

public class UserData {
private Integer userID;
private String userName;
private String userPassword;
//getters and setters..

和Permission类一样..

Permission.java

public class PermissionsData {
private Integer permissionID;
private Integer userID;
private Integer moduleID;
private boolean permissionIsReadOnly;
private boolean permissionIsModify;
private boolean permissionIsFull;
//getters and setters

amd模块类,

module.java

public class ModuleData {
private Integer modId;
private String modName;

我的数据库中有一些模块。当我创建一个新用户时,我列出了这些模块,并添加了复选框来设置权限。提交表单时,我需要将用户数据和他对每个模块的权限插入到Permission表中。

现在我只实现了向数据库插入角色..我的控制器就像..

@RequestMapping(value = "/addRole")
    public ModelAndView addNewRole()
    {
        ModelAndView mav = new ModelAndView("addNewRole");
        RoleData role = new RoleData();
        mav.getModelMap().put("roleDataObj", role);

        List<ModuleData> moduleList = moduleService.getAllModules();
        mav.getModelMap().addAttribute("ModuleList", moduleList);
        return mav;
    }

如何在一次提交时将数据添加到两个表?我还想知道模块和权限之间的映射 我对这个春天真的很新,并且冬眠。所以PLZ引导我提供示例代码.. 提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您在映射中设置了级联

@Cascade(Cascade.all)
private List<Permission> permissions;

就像

一样简单
public void saveNewUser(...)
{
    User user = new User();
    // fill properties
    Permission p = new Permission();
    // fill properties
    user.getPermissions().add(p);

    session.save(user);
}

更新:上面的代码可以使用像这样的类结构。重要的部分是每个用户每个模块的权限集合/映射

public class Permission {
    private boolean IsReadOnly;
    private boolean IsModify;
    private boolean IsFull;
}

public class Module {
    private Integer id;
    private String name;
}

public class User {
    private Integer id;
    private String name;
    private String password;
    private Map<Module, Permission> permissions;
}

和映射

<class name="User">
  ...
  <map name="permissions" cascade="all">
    <key column="UserId"/>
    <index-many-to-many column="ModuleId" class="Module"/>
    <composite-element class="Permission">
      <property name="IsReadOnly"/>
      <property name="IsModify"/>
      <property name="IsFull"/>
    </composite-element>
  </map>