- - PR -
hibernate での "select max(COL) from TABLENAME" の使い方
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-20 10:36
いつもお世話になっております。
現在、hibernate 2.1.7c を使っています。 hql を利用し、 【select * from TABLENAME where COL = '123'】の結果を //==ソースコード== Session session = sessionFactory.openSession(); hql = "from TABLENAME where COL = '123'"; List list = session.find(hql); session.close; //==ソースコード== のように実行することは理解できたのですが 【select max(COL) from TABLENAME】の取得方法が分かりません。 具体的には、下記のsession.find の部分をどのように変更するべきなのでしょうか? //==ソースコード== Session session = sessionFactory.openSession(); hql = "select max(tb01.COL) from TABLENAME tb01"; List list = session.find(hql); ←この部分 session.close; //==ソースコード== 過去ログなどや、インターネット上の他のリソースも検索したのですが、 見つけることができませんでした。 具体的なソースコードで指摘頂けませんでしょうか。 どうぞ、宜しくお願いいたします。 | ||||
|
投稿日時: 2005-01-20 11:29
こんな感じでできるはず。
マニュアルのTip集に載っています。Queryオブジェクトを使う方法もあります。 なおもう持っているかもしれませんが、ここにマニュアルがあります。 http://www.hibernate.org/hib_docs/reference/ja/html/index.html 特に「1. Tomcatでクイック・スタート (1.4. ネコと遊ぶ)」とか 「11. HQL: Hibernateクエリ言語」が便利です。 | ||||
|
投稿日時: 2005-01-21 21:37
アドバイスありがとうございます。
max(COL)については、解決いたしました。 お教え頂いたマニュアル、書籍の「オープンソースJavaプロダクツ」を 参考としていますが、hibernate についてまだまだ理解不足な点が多々あり、 度々で申し訳ないのですが、もうひとつアドバイスを頂けませんでしょうか。 //==CSVファイルから2万件程のデータをDBにinsertあるいはupdateするケース //list1 <-- CSVデータ2万レコードを格納したArrayList for(i=0; i<list1.size(); i++){ CsvBean cb = new CsvBean(); ArrayList list2 = (ArrayList) list1.get(i); // ArrayListからcsv1レコードを取得 cb.setCOL1(list2.get(0).toString()); // hibernateで使うbeanにセット (〜省略〜) cb.setCOL20(list2.get(0).toString()); xxxDAOFactory().create().ins(cb); // daoによりDBへinsert } ■疑問1■ 上記ループ処理の途中で処理がエラーとなった場合に、rollbackを行う方法。 ※dao中で毎回(2万回)トランザクションが完結しているため、どのようにするか? 2万レコードの1レコード目を処理する前にトランザクションを開始し、 2万レコードをすべて処理し終わった場合にはcommit、途中でエラー(不適当なデータ)を 見つけた場合にはrollbackするやり方。 ■疑問2■ CSV2万レコードをinsertあるいはupdateする場合、 ループ処理で毎回(2万回)CsvBeanのインスタンスを作成し、 毎回daoでデータをinsertあるいはupdateするのが一般的な方法なのか? 以上についてアドバイス頂けませんでしょうか。 宜しくお願いいたします。 |
1