본문 바로가기
Hibernate

hibernate Could not find setter (모델 ProjectionList 오류)

by 자바초보자 2016. 6. 2.
728x90

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 발생!

 

해결방법

http://stackoverflow.com/questions/24041107/org-hibernate-propertynotfoundexception-could-not-find-setter-for-an-associat

 

 

AliasToBeanNestedResultTransformer.java

AliasedTupleSubsetResultTransformer.java

TupleSubsetResultTransformer.java

 

AliasedTupleSubsetResultTransformer.java

AliasToBeanNestedResultTransformer.java

TupleSubsetResultTransformer.java

 

 

3개 파일을 작성하여 아래처럼 사용

 

 .setResultTransformer(new AliasToBeanNestedResultTransformer(Person.class));

 

 

 

 

 

 

 

 

 

 

 

728x90