ハイベルナーの照会方法のまとめ
1.get()andロード()
マッチングしたデータベースレコードがない場合、ロード方法は回復できない異常をスローする可能性があります。クラスのマッピングがプロキシを使用している場合、ロード方法は初期化されていないプロキシを返します。プロキシを呼び出したときにデータベースにアクセスします。あるオブジェクトの中に別のオブジェクトを指す関連付けを作成したいなら、データベースからオブジェクトを積載する時に関連するオブジェクトを同時に積載したくないです。このような操作は使えます。対応するクラスマッピング関係のためにbatch-sizeが設定されている場合、このような操作により、複数のオブジェクトを一括してロードすることが可能になる(バックはエージェントであるので、データベースからすべてのオブジェクトのデータを取り込む必要がない)。
該当する行があるかどうかを確認しないと、get()メソッドを使うべきです。すぐにデータベースにアクセスします。対応する行がないとnullに戻ります。
2.HQL
6.filter(不推奨)
7.Detached queries(まだテストしていません)
The DetachedCriteria class lets you create a query out side the scope of a session、and then later execute it using some arbitrary Session
session.get(Clazz, id);
session.load(Clazz, id);
説明:ロード()とget()の違いマッチングしたデータベースレコードがない場合、ロード方法は回復できない異常をスローする可能性があります。クラスのマッピングがプロキシを使用している場合、ロード方法は初期化されていないプロキシを返します。プロキシを呼び出したときにデータベースにアクセスします。あるオブジェクトの中に別のオブジェクトを指す関連付けを作成したいなら、データベースからオブジェクトを積載する時に関連するオブジェクトを同時に積載したくないです。このような操作は使えます。対応するクラスマッピング関係のためにbatch-sizeが設定されている場合、このような操作により、複数のオブジェクトを一括してロードすることが可能になる(バックはエージェントであるので、データベースからすべてのオブジェクトのデータを取り込む必要がない)。
該当する行があるかどうかを確認しないと、get()メソッドを使うべきです。すぐにデータベースにアクセスします。対応する行がないとnullに戻ります。
2.HQL
//
String hql = "from TOrder o where o.id = ?";
TOrder o = (TOrder) s.createQuery(hql)
.setParameter(0, orderId)
.uniqueResult();
//
Query q = sess.createQuery("from DomesticCat cat where cat.name = :name");
q.setString("name", "Fritz");
//
Query q = sess.createQuery("from DomesticCat cat where cat.name = ?");
q.setString(0, "Izi");
//
Query q = sess.createQuery("from DomesticCat cat where cat.name in (:namesList)");
q.setParameterList("namesList", names);
//
Query q = sess.createQuery("from DomesticCat cat");
q.setFirstResult(20);
q.setMaxResults(10);
List cats = q.list();
3. Criteria
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
Restrictions.eq( "age", new Integer(0) ),
Restrictions.isNull("age")
) )
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.list();
4.Native SQLString treeSql = "" +
"select , level from tree t " +
" start with t.parent_id = 0 " +
" connect by prior t.id = t.parent_id";
List result = session.createSQLQuery(treeSql)
.addEntity("t", Tree.class)
.addScalar("level", Hibernate.INTEGER)
.list();
5.Named SQL queries(不推奨)6.filter(不推奨)
7.Detached queries(まだテストしていません)
The DetachedCriteria class lets you create a query out side the scope of a session、and then later execute it using some arbitrary Session