私が達成しようとしているのは、次のように定義されたクエリに結果トランスフォーマーを設定することです。
String hqlQueryString = "select o.id as id, o.name as objectName from MyObject";
Class resultClass = MyObject.class;
Query query = session.createQuery(hqlQueryString).setResultTransformer(
new new AliasToBeanResultTransformer(resultClass));
List result = query.list();
MyObjectは次のようになります。
public class MyObject {
private int id;
private String objectName;
public int getId() {
return id;
}
public void setId(int value) {
this.id = value;
}
public String getObjectName() {
return objectName;
}
public void setobjectName(String value) {
this.objectName = value;
}
}
問題は、エイリアスを指定したにもかかわらず、id
実行objectName
される実際のクエリが異なるエイリアスを使用することです。これにより、エイリアスがプロパティ名と一致しないため、AliasToBeanResultTransformer
構築に失敗します。MyObject
プログラムでHibernateによって生成されたクエリのエイリアスを取得することは可能ですか(Bean結果トランスフォーマーのエイリアスに設定できます)?使用してみquery.getReturnAliases()
ましたが、Hibernateが実際に使用するエイリアスではなく、HQLで定義したエイリアスが返されます。
createQuery
ステートメントでエイリアスを明示的に指定できますか?現在、これが機能するための基準を使用しないようにしています。そのため、クエリオブジェクトが存在する場合は、それを使用するアプローチをいただければ幸いです。
アップデート
上記の問題は、標準のHQLクエリ(コメントを参照)では無効ですが、ネイティブクエリを実行する場合は有効です。具体的には、ネイティブクエリはすべてのエイリアスを小文字の文字列として扱うように見えました(クエリで導入された可能性のある特定の大文字化にもかかわらず)。これにより、AliasToBeanResultTransformer
大文字と小文字が重要な場合に、プロパティを設定するときにが失敗します。