Java 创建identitymanager角色后,角色字段未存储在数据库中

Java 创建identitymanager角色后,角色字段未存储在数据库中,java,security,seam,Java,Security,Seam,我使用的是seam 2.1.2安全性,我通过jsf richfaces GUI使用identitymanager创建了一个角色。在创建过程中,我会向数据库中创建的角色添加一个描述,创建角色是可以的,但没有添加描述字段,我必须通过GUI在其他操作中更新角色,以查看存储在数据库中的描述字段。问题是我要做什么来存储创建操作中的描述文件 下面是我的代码: public boolean createRole(Role role) { IdentityManager identityManage

我使用的是seam 2.1.2安全性,我通过jsf richfaces GUI使用identitymanager创建了一个角色。在创建过程中,我会向数据库中创建的角色添加一个描述,创建角色是可以的,但没有添加描述字段,我必须通过GUI在其他操作中更新角色,以查看存储在数据库中的描述字段。问题是我要做什么来存储创建操作中的描述文件

下面是我的代码:

  public boolean createRole(Role role) {
    IdentityManager identityManager = IdentityManager.instance();
logger.info("creating role:" + role.getRoleName());
if (identityManager.roleExists(role.getRoleName())) {
    return false;
}
if (identityManager.createRole(role.getRoleName())) {
    completeRolePersistence(role);
    return true;
}
return false;
}
和completeRolePersistence方法:

public void completeRolePersistence(Role role) {
    logger.info("setting additional info to role...");
    Query query = em.createNamedQuery("UPDT_ADDITIONALS");
    query.setParameter("name", role.getRoleName())
            .setParameter("description", role.getDescription())
            .setParameter("level", role.getRoleLevel());
    int updated = query.executeUpdate();
    logger.info("roles updated with desc : " + updated);
}
似乎查询没有执行,我在日志中打印

roles updated with desc : 0

代码无法工作的原因是,更新查询是在角色实际插入数据库之前执行的,因此它不会更新任何内容

我的建议是不要使用IdentityManager中的角色/用户创建方法。与让IdentityManager为您创建/编辑角色和用户相比,您最好创建主组件


但是,如果您想继续这样做,则需要覆盖JpaIdentityStore,自定义createRole方法,并根据需要将其填充到实体中。

这是完美的thx,我使用entitymanager的Just persist方法和it store角色,并在db中具有所有文件和权限