gpt4 book ai didi

java - 创建 IdentityManager 角色后,角色字段未存储在数据库中

转载 作者:行者123 更新时间:2023-12-01 05:04:22 25 4
gpt4 key购买 nike

我正在使用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 中的角色/用户创建方法。您最好创建 Home 组件来创建/编辑您的角色和用户,而不是让 IdentityManager 为您做这件事。

如果您想实现这一点,则需要覆盖 JpaIdentityStore,自定义 createRole 方法并让它根据需要填充实体。

关于java - 创建 IdentityManager 角色后,角色字段未存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com