2013-09-21 82 views
1

我有table1,key_column爲主鍵。表2具有來自表1的key_column作爲外鍵。 table2與table1有多對一的關係。HIbernate多對一連接條件查詢

我想運行一個連接查詢。

Select table1.*, table2.* from table1, table2 where table2.id = ? 
    table2.some_column_other_than_key_column = ? 
    and table1.key_column = table2.key_column 

<class name="tbl2class" table="tbl2" lazy="false"> 
    <many-to-one name="tbl1class" column="key_column" 
     class="tbl1Class" 
     cascade="none" lazy="false" fetch="join" update="false" insert="true" /> 

</class> 

List<tbl2Class> tbl2List= getSession().createCriteria(tbl2Class.class) 
      .add(Restrictions.eq("id", id)) 
      .add(Restrictions.eq("tbl1.someColumnOtherThanKeyColumn", messageType)) 
      .add(Restrictions.or(categoryRestriction, strategyRestriction)) 
      .list(); 

我得到一個異常mentiontiong無法解析tbl1.someColumnOtherThanKeyColumn - 爲什麼 - 我在做什麼錯誤。

public class Tbl1Class 
{ 
    private Tbl2Class tbl2Class 
} 
+0

'tbl1.someColumnOtherThanKeyColumn'我認爲這是不正確,你必須使用'對象names'不分貝 – nachokk

+0

名稱可能是我沒能成功在我的例子中清楚,我正在使用對象名稱而不是表列名稱 – user238021

回答

3

你應該使用這樣的

Criteria tbl2Criteria = getSession().createCriteria(tbl2Class.class); 
tbl2Criteria.add(Restrictions.eq("id", id)); 
Criteria tbl1Criteria = tbl2Criteria.createCriteria("tbl1Class");//assuming thats the name of the tbl1 instance in tbl2 class 
tbl1Criteria.add(Restrictions.eq("someOtherThanKeyColumn", messageType)); 
tb12Criteria.add(Restrictions.or(categoryRestriction, strategyRestriction)); 
List<tbl2Class> result = tbl2Criteria.list();