2011-08-15 4 views
1

어느 한 다음 쿼리를 기준으로 저를 도와 줄래 : 나는SQL을 따르기위한 기준은 무엇입니까?

Criteria criteria = session.createCriteria(TableA.class); 
criteria.setFetchMode("TableB", FetchMode.JOIN); 

위의 기준은 두 테이블의 데이터를 retrives 다음과 같은 기준에 노력하고

SELECT * From TableA Inner Join TableB On TableA.ID=TableB.ID 

.

또한 TableA의 특정 열만 있으면 기준이 어떻게 변경됩니까?

감사합니다.

편집 : TableA에는 TableB와 일대 다 관계가 있습니다.

+0

답변이 도움이 되었습니까? – Ali

답변

1

질문에 의미가 없습니다. 최대 절전 모드에서는 2 개의 테이블이 실제로 엔티티 여야하며,이 경우 엔 두 엔티티 사이에 관계가 있습니다. 무작위로 2 개의 테이블을 결합하여 결과를 얻으려고하십니까? 그렇다면 SQL을 사용하고 ResultTransformer을 사용하여 결과를 객체로 변환해야합니다.

private ResultTransformer getResultsTransformer() 
{ 
    ResultTransformer transformer = new AliasToBeanResultTransformer(
      MyResultBean.class) { 
     @Override 
     public Object transformTuple(Object[] values, String[] aliases) 
     { 
      MyResultBean row = new MyResultBean(); 
      for (int i = 0; i < aliases.length; i++) 
      { 
       row.set(aliases[i], values[i]); 
      } 
      return (row); 
     } 
    }; 
    return transformer; 
} 

전화는 다음이 같이

Query q = session.createSQLQuery(sql); 
    q.setResultTransformer(getResultsTransformer()); 
    List<MyResultBean> list = q.list(); 

UPDATE : 표 A가있는 경우 1 - 투 - 많은 표 B에, 나는 그것이 쉬운

Criteria criteria = getSession().createCriteria(TableA.class); 
criteria.createAlias("tableB","b"); 
criteria.add(Restrictions.eqProperty("id", "b.id"); 
criteria.list(); 
별칭을 사용하여 찾을 수

도움이되기를 바랍니다. 감사합니다,

+0

죄송합니다 질문을 편집, TableA to TableB에 대한 일대 다 관계 양식이 있습니다. – Ritesh

+0

@Ritesh, 답변이 업데이트되었습니다. 테스트는 아니지만 수행해야 할 작업에 대한 일반적인 아이디어를 제공해야합니다. – Ali

+0

네 접근 방식이 작동합니다. 단지 addAlias를 createAlias로 편집했습니다. 하지만 내가 사용한 Criteria criteria = getSession(). createCriteria (TableAlass) .createCriteria ("tableB"); criteria.list(); 이것은 나에게 잘 돌아갔다. – Ritesh

0

JOIN으로, 당신은 오직 "루트 엔티티"(tableA) 만 원한다고 하이버 네이트 할 필요가 있습니다. 코드에 다음을 추가하십시오.

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
관련 문제