remagine
hibernate createCriteria에 관해서 본문
hibernate createCriteria에 관해서
http://docs.jboss.org/hibernate/core/3.5/reference/en/html/querycriteria.html
만일 당신이 hibernate 문서를 보다가 문제가 생겼다면
https://stackoverflow.com/questions/4709693/hibernate-createcriteria
스택오버플로우를 보다 이해가 안됬다면
도움이 될 것이라 생각하네요.
객체 안에 객체에 연관관계, 조건을 걸어주고 싶을때 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // for excel download @SuppressWarnings("unchecked") public List<IntItem> listAll(Language language, ItemSearchForm searchForm) { Criteria q = session().createCriteria(IntItem.class); q.add(Restrictions.ne("state", State.deleted)) .add(Restrictions.eq("language", language)) .addOrder(Order.desc("createAt")) .addOrder(Order.desc("id")); if(StringUtils.isNotEmpty(searchForm.getBrandCategoryId())){ q.add(Restrictions.eq("intBrandCategory.id", Integer.parseInt(searchForm.getBrandCategoryId()))); } if(StringUtils.isNotEmpty(searchForm.getBrandId())){ q.createCriteria("intBrandCategory") .add(Restrictions.eq("intBrand.id", Integer.parseInt(searchForm.getBrandId()))); } if(StringUtils.isNotEmpty(searchForm.getState())){ q.add(Restrictions.eq("state", State.valueOf(searchForm.getState()))); } if(StringUtils.isNotEmpty(searchForm.getQ())){ q.add(Restrictions.ilike("title", searchForm.getQ(), MatchMode.ANYWHERE)); } return q.list(); } | cs |
지난 번 프로젝트 중 애먹었던 부분이다.
IntItem Class 연관 관계
문제가 되었던 요구사항을 다음과 같다.
createCriteria(IntItme.class) 를 가지고
int_brand의 id로 검색하는 것.
int_item은 int_brand_category를 가지고 있지만
int_brand는 int_brand_category가 가지고 있어서
접근이 안되었다.
이 때
int_item에 존재하는 intBrandCategory 를
q.createCriteria("intBrandCategory")를 추가해주니
intBrand.id가 접근이 가능했다.
1 2 3 4 5 | if(StringUtils.isNotEmpty(searchForm.getBrandId())){ q.createCriteria("intBrandCategory") .add(Restrictions.eq("intBrand.id", Integer.parseInt(searchForm.getBrandId()))); } | cs |
어렵게 fetchMode.join을 쓸 필요가 없이 간단하게 해결가능
Comments