hibernate Could not find setter (모델 ProjectionList 오류)
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));
끝