2016-06-30 21 views
0

私はHibernateからマップを返す方法を模索していました。 Hibernate:MapとResult Transformerの違い

は、私は私が二つの方法

最初のものはされたことにより、それを行うことができます知っているようになった:

String HQL_QUERY = 
       "select new map(hp.col1 , hp.col2) from HP hp where hp.col1 in (:Ids)"; 
      test = 
       getSession().createQuery(HQL_QUERY).setParameterList("Ids", ids).list(); 

OtheroneがsetResultTransformer使用している使用して、マップ

String HQL_QUERY = 
      "select hp.col1 , hp.col2 from HP hp where hp.col1 in (:Ids)"; 
     test = 
      getSession().createQuery(HQL_QUERY).setParameter("Ids", ids) 
       .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list(); 

両方の方法で私は同じ結果を得ています....問題はありません。

しかし、他のものを使用する利点があるかどうか質問したいと思います。

たとえば、マップを使用している場合はコードを少なく書く必要がありますが、結果トランスがより効率的であるかどうかはわかりません。

私はGoogleで見つけようとしましたが、それほど多くは見つかりませんでした。

助けてください

+0

効率に関する情報はありません。どちらも当てはまります。 –

+0

効率的ではありませんが、いくつかの違いがあります – sparsh610

答えて

0

これは同じことを表現する2つの方法です。 QueryLoader.javaのクラス解析HQLクエリです:

selectNewTransformer = HolderInstantiator.createSelectNewTransformer(
      selectClause.getConstructor(), 
      selectClause.isMap(), 
      selectClause.isList()); 

selectClause.isMap()true(あなたがそれを確認したい場合は、ConstructorNode.javaを見て)

になります。ここここ

は、Hibernateのソースから確認があります

そしてHolderInstantiator.java中:

public static ResultTransformer createSelectNewTransformer(Constructor constructor, boolean returnMaps, boolean returnLists) { 
    if (constructor != null) { 
     return new AliasToBeanConstructorResultTransformer(constructor); 
    } 
    else if (returnMaps) { 
     return Transformers.ALIAS_TO_ENTITY_MAP;    
    } 
    else if (returnLists) { 
     return Transformers.TO_LIST; 
    }  
    else { 
     return null; 
    } 
} 

ので、私はGUE hql select句の中のmap()は、より読みやすく簡潔なものです。それとは別に、まったく同じことがシーンの後ろで起こります。

関連する問題