2013-01-16 37 views
4

以外訪問我有一個名爲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; 
    } 
} 
+0

我們能否看到用戶加載的代碼? – Pablo

回答