hibernateでは、オリジナルsqlクエリの結果をエンティティbeanにマッピングする方法
1205 ワード
hibernateはオープンソースのオブジェクト関係マッピングフレームワークであり,JDBCを非常に軽量レベルのオブジェクトカプセル化していることが知られている.
個人的には、hibernateが持参したhql文は使いやすいとは限らないと思います.
現実の仕事では、oracleの再帰、複雑な文のクエリーなど、元のsqlでクエリーを行うシーンがたくさんあります.hqlも再帰的で複雑な文のクエリーができるかもしれませんが、私のようにibatisを使い慣れているのは、hqlが不快です.
簡単に例を挙げて言えば、hqlとsqlの違いです.
hql : select u from SysUser u where u.userName = '' order by u.id
sql : select * from sys_user u where u.user_name='order by u.id SysUserがクラス名、対応テーブル名がsys_user;userNameはクラスの属性名であり、対応するテーブルのフィールド名user_name
Hibernateでオリジナルsqlでクエリーして結果セットをエンティティbeanにマッピングしたことはありますか?
資料を調べてみると、HibernateはcreateSQLQueryを使うことができた.マッピングのためにaddEntity(xxx.class)を使用します.
ちなみにhibernateのcreateQueryとcreateSQLQueryの違いは、
1.前者はhql文でクエリーし、後者はsql文でクエリーできます.
2.前者はhibernateで生成したbeanをオブジェクトとしてlistを読み込み返し、後者はオブジェクト配列で格納する.
はい、実は簡単です.コード:
この方法はhibernateを取得したsessionが一般的にDAO層にあるためDAO層である.
注:本人はhibernate 3を使っています.6.4
まず簡単に言えば、これは仕事のノートです.もし間違っていたら、指摘を歓迎します.
個人的には、hibernateが持参したhql文は使いやすいとは限らないと思います.
現実の仕事では、oracleの再帰、複雑な文のクエリーなど、元のsqlでクエリーを行うシーンがたくさんあります.hqlも再帰的で複雑な文のクエリーができるかもしれませんが、私のようにibatisを使い慣れているのは、hqlが不快です.
簡単に例を挙げて言えば、hqlとsqlの違いです.
hql : select u from SysUser u where u.userName = '' order by u.id
sql : select * from sys_user u where u.user_name='order by u.id SysUserがクラス名、対応テーブル名がsys_user;userNameはクラスの属性名であり、対応するテーブルのフィールド名user_name
Hibernateでオリジナルsqlでクエリーして結果セットをエンティティbeanにマッピングしたことはありますか?
資料を調べてみると、HibernateはcreateSQLQueryを使うことができた.マッピングのためにaddEntity(xxx.class)を使用します.
ちなみにhibernateのcreateQueryとcreateSQLQueryの違いは、
1.前者はhql文でクエリーし、後者はsql文でクエリーできます.
2.前者はhibernateで生成したbeanをオブジェクトとしてlistを読み込み返し、後者はオブジェクト配列で格納する.
はい、実は簡単です.コード:
public List<E> getListEntityBySql(String sql,E entity) {
Session session = this.getSession();
Query query = session.createSQLQuery(sql).addEntity(entity.getClass());
return query.list();
}
この方法はhibernateを取得したsessionが一般的にDAO層にあるためDAO層である.
注:本人はhibernate 3を使っています.6.4
まず簡単に言えば、これは仕事のノートです.もし間違っていたら、指摘を歓迎します.