一个简单的hibernate权限管理,采用t_user(用户表),t_role(角色表),和t_user_role(中间表),贴上写的代码public void testSave2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();

Role r1 = new Role();
r1.setName("数据录入人员");
                //因为后面引用到了所以要先存一下
session.save(r1);

Role r2 = new Role();
r2.setName("商务主管");
session.save(r2);

Role r3 = new Role();
r3.setName("大区经理");
session.save(r3);

User u1 = new User();
u1.setName("A");
Set u1Roles = new HashSet();
u1Roles.add(r1);
u1Roles.add(r2);
u1.setRoles(u1Roles);

User u2 = new User();
u2.setName("B");
Set u2Roles = new HashSet();
u2Roles.add(r2);
u2Roles.add(r3);
u2.setRoles(u2Roles);

User u3 = new User();
u3.setName("C");
Set u3Roles = new HashSet();
u3Roles.add(r1);
u3Roles.add(r2);
u3Roles.add(r3);
u3.setRoles(u3Roles);

session.save(u1);
session.save(u2);
session.save(u3);

session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}后来我想从t_role表中读取权限存入user的roles集合中public void testSave2() {
Session session = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();

// String query = "from Role";
// List rolelist = session.createQuery(query).list();
//
// Role role[] = new Role[3];
// for(Iterator iter = rolelist.iterator() ; iter.hasNext();){
// int i = 0;
// role[i] = (Role) iter.next();
// }
//
// User u1 = new User();
// u1.setName("张三");
// Set u1Roles = new HashSet();
// u1Roles.add(role[0]);
// u1Roles.add(role[1]);
// u1.setRoles(u1Roles);
//
// User u2 = new User();
// u2.setName("李四");
// Set u2Roles = new HashSet();
// u2Roles.add(role[1]);
// u2Roles.add(role[2]);
// u2.setRoles(u2Roles);
//
// User u3 = new User();
// u3.setName("王五");
// Set u3Roles = new HashSet();
// u3Roles.add(role[0]);
// u3Roles.add(role[1]);
// u3Roles.add(role[2]);
// u3.setRoles(u3Roles);

session.save(u1);
session.save(u2);
session.save(u3);

session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
}这样是行不通的说是 Column 'roleid' cannot be null
请问各位大侠该怎么修改才能实现从t_role表里读取权限数据,并且存入数据库中?

解决方案 »

  1.   

     Column 'roleid' cannot be null可能是因为Role的主键生成机制是native吧
      

  2.   

    恩,Role的主键生成策略是native(如果用户新增权限方便添加),根据上面的情况,我应该怎么修改呢?
      

  3.   

    第一种情况是可以的,但是以后没注册一次用户就要存一遍权限,这个是不行的,有办法避过Role r1 = new Role();
    r1.setName("数据录入人员");
    //因为后面引用到了所以要先存一下
    session.save(r1);
    么,我想从数据库里读权限然后进行操作,请问这样有办法么?