Hibernate 조회 방식 총괄

1.get()및 load()Java 코드 session.get(Clazz,id);  session.load(Clazz, id);   session.get(Clazz, id);   session.load(Clazz, id); 설명:load()와 get()의 차 이 는 일치 하 는 데이터베이스 기록 이 없 으 면 load()방법 은 복구 할 수 없 는 이상(unrecoverable exception)을 던 질 수 있 습 니 다.클래스 맵 이 프 록 시(proxy)를 사용 하면 load()방법 은 초기 화 되 지 않 은 프 록 시 를 되 돌려 줍 니 다.이 프 록 시 를 호출 할 때 까지 데이터 베 이 스 를 방문 할 수 있 습 니 다.만약 당신 이 특정한 대상 에서 다른 대상 을 가리 키 는 관 계 를 만 들 고 싶 고 데이터베이스 에서 이 대상 을 불 러 올 때 관련 된 대상 을 동시에 불 러 오고 싶 지 않다 면 이런 조작 방식 은 사용 할 수 있 습 니 다.해당 클래스 맵 관 계 를 위해 batch-size 를 설정 하면 여러 대상 이 한 번 에 불 러 올 수 있 도록 합 니 다(프 록 시 를 되 돌려 주기 때문에 데이터베이스 에서 모든 대상 의 데 이 터 를 캡 처 할 필요 가 없습니다).일치 하 는 줄 이 있 는 지 확인 하지 못 하면 get()방법 을 사용 해 야 합 니 다.데이터 베 이 스 를 즉시 방문 합 니 다.해당 하 는 줄 이 없 으 면 null 로 돌아 갑 니 다.2.HQL Java 코드

//
  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();
  
//
  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();
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 SQL Java 코드

String 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();
String 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 query(추천 하지 않 음)6.filter(추천 하지 않 음)7.Detached query(아직 테스트 하지 않 음)DetachedCriteria 클래스 를 사용 하면 세 션 범위 밖의 쿼 리 를 생 성 할 수 있 습 니 다. and then later execute it using some arbitrary Session

좋은 웹페이지 즐겨찾기