【发布时间】:2016-02-11 00:53:50
【问题描述】:
我有点困惑:我有一个带有 JSF、EJB 和 JPA 的 Java EE 应用程序。
我有一个UserService,它是一个EJB。
@Stateless
public class UserService {
public User create(User u) throws ProcessingException {
if (!exists(u)) {
u = userDao.create(u);
addRole(u, RoleType.USER);
return u;
} else {
throw new ProcessingException("User " + u.getUsername() + " already exists");
}
}
public boolean hasRole(User u, RoleType r) {
if (u == null || r == null) {
return false;
}
if (!userDao.isManaged(u)) {
u = userDao.find(u.getId());
}
Set<Role> roles = u.getRoles();
...
}
}
我遇到了一些问题并进行了一些调试,发现有时在hasRole 中,User 不处于托管状态,为什么我这样做userDao.isManaged(u)。但是我不明白为什么它有时不受管理。你能解释一下原因吗?
例子:
@Test
public void test() throws ProcessingException {
Client c = clientBuilder.build();
User u = new User();
u.setClient(c);
userService.create(u);
userService.addRole(u, RoleType.APPROVER);
当addRole(u, RoleType.APPROVER) 被调用时,u 处于非托管状态。但为什么?!
我是否总是必须在我的方法中添加检查以确保实体受到管理?
【问题讨论】:
标签: jakarta-ee jpa ejb entity managed