以外訪問我有一個名爲User
它具有以下字段名爲roles
實體:的EclipseLink,懶惰取收集交易
@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
之後,我訪問用於加載User
實體的事務之外的此role
字段。我期待得到一個錯誤,因爲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;
}
}
我們能否看到用戶加載的代碼? – Pablo