HibernateTemplate 는 조건 을 만족 시 키 는 기록 총 수 를 Example 방식 으로 조회 합 니 다.

2004 단어 springHibernatessh
오늘 SSH 를 하 다가 HibernateTemplate 에 findByExample()방법 이 있 는 것 을 발 견 했 지만,입력 JavaBean 조건 을 충족 시 키 는 모든 JavaBean 을 되 돌려 주 었 다.만약 에 제 가 조건 을 만족 시 키 는 기록 총 수 를 얻 고 싶 습 니 다.예 를 들 어 페이지 를 나 눌 때 저 는 먼저 총 수 를 조회 한 다음 에 몇 페이지 로 나 누 어 표시 할 수 있 습 니 다.이때 findByExample().size()를 사용 하면 좋 지 않 습 니 다.특히 데이터 양 이 매우 많 을 때.
 
그러나 Hibernate 는 countByExample()과 유사 한 방법 을 제공 하지 않 았 다.일반적인 방법 은 Query 가 스스로 조건 을 쓰 는 것 이다.자바 빈 의 속성 이 많 고 어떤 속성 이 null 인지 확실 하지 않 으 면 비참 하 다.나 는 findByExample()방법 을 살 펴 보 았 는데,완전히 모방 하여 다음 과 같은 새로운 방법 을 쓸 수 있 음 을 발견 하 였 다.
다른 방법 이 있 을 지 모 르 겠 지만 저 는 아직 Spring 에 익숙 하지 않 으 니 아 쉬 운 대로 사용 하 겠 습 니 다.
	public int countByExample(final Object entityBean) {
		Assert.notNull(entityBean, "Example entity must not be null");
		return (Integer) getHibernateTemplate().executeWithNativeSession(new HibernateCallback() {
			public Object doInHibernate(Session s) throws HibernateException, SQLException {
				//      Criteria,  Hibernate  
				Criteria criteria = s.createCriteria(entityBean.getClass())
						.setProjection(Projections.projectionList()
								.add(Projections.rowCount()))
								.add(Example.create(entityBean));
				//      HibernateTemplate prepareCriteria  ,      protected,
				//       ,      
				if (getHibernateTemplate().isCacheQueries()) {
					criteria.setCacheable(true);
					if (getHibernateTemplate().getQueryCacheRegion() != null)
						criteria.setCacheRegion(getHibernateTemplate().getQueryCacheRegion());
				}
				if (getHibernateTemplate().getFetchSize() > 0)
					criteria.setFetchSize(getHibernateTemplate().getFetchSize());
				if (getHibernateTemplate().getMaxResults() > 0)
					criteria.setMaxResults(getHibernateTemplate().getMaxResults());
				SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory());
				return criteria.uniqueResult();
			}
		});
	} 

좋은 웹페이지 즐겨찾기