2014-09-13 16 views
1

模型Hibernate的預先加載的是一個user可以有很多LoginSessions(LogginSession可以與只有一個用戶)。
我試圖做到的,是把與相關LoginSession(它的令牌查詢提供)的用戶。 所有的,我想只有一個查詢做了,這樣做,我想用預先加載,這裏是我的代碼:與查詢

我有這樣的代碼:

LoginSession loginSession = new LoginSession(); 
    loginSession.setToken(sessionToken); 

    //Example loginSessionExample = Example.create(loginSession); 

    Criteria crit = session.createCriteria(User.class); 
    crit.createAlias("userLoginSession", "session"); 
    crit.add(Restrictions.eq("session.token", sessionToken)); 
    crit.setMaxResults(1); 
    crit.setFirstResult(0); 
    crit.setFetchMode("loginSession", FetchMode.JOIN); 

List<?> usersList = (List<?>) crit.list(); // first query 

if(usersList.size() == 1) 
{ 
    User user = (User) usersList.get(0); 
    LoginSession loginSession = (LoginSession) user.getUserLoginSession().toArray()[0]; //second query 
    ... 

的問題是,有2個quire正在執行(請參閱提供的代碼中的註釋)。

我在做什麼毛病我的標準,我怎麼能做出是一個查詢?

感謝

回答

1

這是Hibernate的方式(也是最奧姆斯)工作:從其他表他們延遲加載關係實際上只在需要時。如果他們不這樣做,那麼當你想要的只有一個對象時,你可以加載大部分數據庫。

延遲加載可以通過關係被禁用,關係,如在this StackExchange answer說明。但是,這意味着它將始終被禁用,因此在做之前確保這確實是一件壞事。

我不會說,你所描述的情況是一件壞事。