remagine

hibernate createCriteria에 관해서 본문

SQL

hibernate createCriteria에 관해서

remagine 2017. 6. 19. 15:55
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