hibernateカスタム結果セット
hibernateでは、多くのテーブルからデータを抽出する必要があるなど、複雑なビジネスが必要になる場合があります.この場合、結果セットをカスタマイズする必要があります.
仮定:私はそれぞれ7枚の表からa,b,c,d,e,f,g,hフィールドを取る必要があります.元のマッピングファイルが満たされていない場合、これらのフィールドを含むエンティティbeanを作成しました.
1.Daoの書き方:
2.もちろんこれは私の好きな方法にすぎません.hibernateは多くのものを提供しています.具体的にはhibernateの公式ドキュメント:Native SQLクエリーに参加してください.
3.注意すべきは、Oracleの戻り方が一致していないものもあれば、デフォルトでは大文字フィールドが返されているものもあり、Setterメソッドが見つからないことです.
処理方法は次のとおりです.
4.戻りタイプでは、エラーが頻繁に発生します.たとえばoracleフィールドAタイプNumberでは、エンティティをIntegerなどのタイプとして定義するとエラーが発生します.
ここで解決策としては,Objectタイプとして定義したり,Aをクエリする際に|’,強制的に文字列を返す.
仮定:私はそれぞれ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をクエリする際に|’,強制的に文字列を返す.