hibernateカスタム結果セット


hibernateでは、多くのテーブルからデータを抽出する必要があるなど、複雑なビジネスが必要になる場合があります.この場合、結果セットをカスタマイズする必要があります.
 
仮定:私はそれぞれ7枚の表からa,b,c,d,e,f,g,hフィールドを取る必要があります.元のマッピングファイルが満たされていない場合、これらのフィールドを含むエンティティbeanを作成しました.
 
1.Daoの書き方:
 
String sql = "...";
Session session = super.getSessionFactory().getCurrentSession();
SQLQuery query= session.createSQLQuery(sql.toString());
query.setResultTransformer(Transformers.aliasToBean(bean.class));//   bean

 
2.もちろんこれは私の好きな方法にすぎません.hibernateは多くのものを提供しています.具体的にはhibernateの公式ドキュメント:Native SQLクエリーに参加してください.
 
3.注意すべきは、Oracleの戻り方が一致していないものもあれば、デフォルトでは大文字フィールドが返されているものもあり、Setterメソッドが見つからないことです.
処理方法は次のとおりです.
  
Query query = getCurrentSession().createSQLQuery(sql)
		.addScalar("poNumber").addScalar("         ");

    :

select 
po_number \"po_number\",
payment_id \"payment_id\",
sum(invoice_amount) \"total_money\" 
from table;

      ,        。        。     。

       ,       。   map    。

 
4.戻りタイプでは、エラーが頻繁に発生します.たとえばoracleフィールドAタイプNumberでは、エンティティをIntegerなどのタイプとして定義するとエラーが発生します.
ここで解決策としては,Objectタイプとして定義したり,Aをクエリする際に|’,強制的に文字列を返す.