Hibernate
Amodel - @ManyToOne Bmodel
Bmodel - @OneToMany Cmodel
Amodel 만 조건 없이 select 할 경우 A,B,C 모델이 한번에 JOIN, SELECT에 의해 조회가됨.
A,B model select가 필요한 경우 ProjectionList로 설정하여 필요한 컬럼만 select해서 가져와야함.
class Person {
private Long id;
private String name;
private Car car;
// getters and setters
}
class Car {
private Long id;
private String color;
// getters and setters
}
List<Person> getPeople() {
ProjectionList projections = Projections.projectionList()
.add(Projections.id().as("id"))
.add(Projections.property("name").as("name"))
.add(Projections.property("c.id").as("car.id"))
.add(Projections.property("c.color").as("car.color"));
Criteria criteria = getCurrentSession().createCriteria(Person.class)
.createAlias("car", "c")
.setProjection(projections)
.setResultTransformer(Transformers.aliasToBean(Person.class));
return (List<Person>) criteria.list();
}
Car 를 인식하지 못하여 org.hibernate.PropertyNotFoundException: Could not find setter 발생!
해결방법
AliasToBeanNestedResultTransformer.java
AliasedTupleSubsetResultTransformer.java
TupleSubsetResultTransformer.java
AliasedTupleSubsetResultTransformer.java
AliasToBeanNestedResultTransformer.java
TupleSubsetResultTransformer.java
3개 파일을 작성하여 아래처럼 사용
.setResultTransformer(new AliasToBeanNestedResultTransformer(Person.class));
끝
'Hibernate' 카테고리의 다른 글
select, save update 시 디비 특정 function을 호출해야될경우 (0) | 2016.04.06 |
---|---|
hibernate criteria query 조건문 (0) | 2016.02.23 |
onetomany order by 정렬 순서 문제 (0) | 2016.02.23 |
하이버네이트 모든 테이블명 조회 (0) | 2015.11.23 |