gpt4 book ai didi

jpa - EclipseLink,可以在事务之外访问延迟获取集合

转载 作者:行者123 更新时间:2023-12-04 14:09:29 24 4
gpt4 key购买 nike

我有一个名为 User 的实体其中有以下字段名为 roles :

@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = {@JoinColumn(name = "user_id", nullable = false)},
inverseJoinColumns = {@JoinColumn(name = "role_id", nullable = false)}
)
private List<Role> roles;

我加载了 User通过使用服务方法并将服务方法包装在事务(JTA)中。调用服务方法并检索到 User 后, 我访问这个 role用于加载 User 的事务之外的字段实体。我期待得到一个错误,因为 eclipselink 文档指出,默认情况下,ManyToMany 关联的 fechtype 是 lazy .这告诉我,当 User实体是在服务方法中加载的, roles不应自动加载。

为什么我可以访问 roles在交易之外?为什么看起来像 roles被急切地获取而不是懒惰?

这是加载用户的服务类(我删除了一些与问题无关的代码):

@Service
@Transactional(rollbackFor = ServiceException.class)
public class UserServiceImpl implements UserService {

@Autowired(required = true)
private UserRepository userRepository;


@Override
public User authenticate(String username, String password) throws ServiceException {
//Get the user
List<User> users = userRepository.findByUsername(username);

if (users == null || users.isEmpty() || users.size() > 1) {
return null;
}

User user = users.get(0);
String hash = getHash(password, user.getSalt());

return StringUtils.equals(hash, user.getPassword()) ? user : null;
}
}

最佳答案

只要上下文仍然可用,EclipseLink 就允许获取惰性关系,如下所述:https://forums.oracle.com/forums/thread.jspa?messageID=1706796

关于jpa - EclipseLink,可以在事务之外访问延迟获取集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14368075/

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