我有一个名为的实体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;
Run Code Online (Sandbox Code Playgroud)
我User
使用服务方法加载via,服务方法包含在事务(JTA)中.在调用服务方法并检索之后User
,我role
在用于加载User
实体的事务之外访问此字段.我期待得到一个错误,因为eclipselink文档声明,默认情况下,ManyToMany关联的fechtype是懒惰的.这告诉我,当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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
771 次 |
最近记录: |