2016-11-15 8 views
1

돌기 콩 연쇄 세터를 무시 : 나는 때문에 성능 문제의 돌기 콩을 사용하고최대 절전 모드는 다음과 같이 쓸 수 있습니다 내가 QueryDsl/JPA/최대 절전 모드와 간단한 쿼리를하고있는 중이 야

SELECT u.id, u.name FROM user u WHERE u.id = 1;

... QueryDsl와

이 같은 쿼리보기 :

query.from(qUser).where(qUser.id.eq(1)).singleResult(
    Projections.bean(User.class, 
     qUser.id, 
     qUser.name 
    ) 
); 

내 문제는 내 User 엔티티입니다. 모든 세터가 this을 반환하도록 세터를 연결하고 싶습니다. 프로젝션 빈 Hibernate로 그렇게 할 때 setter를 호출하지 마십시오 (디버그 모드에서 보았습니다). User 엔티티가 초기화되지 않았습니다. 이 User 엔티티 선언

exemple 들어

:이 문제를 해결하는 솔루션이

User: {id: 1, name: null} 

있습니까 :

@Entity(name = "USER") 
public class User { 

    @Column(name = "ID") 
    private Long id; 

    @Column(name = "NAME") 
    private String name; 

    public void setId(Long id) { //Setter called 
     this.id = id; 
    } 

    public User setName(String name) { //Setter not called 
     this.name = name; 
     return this; 
    } 
} 

나는 사용자가 null 이름으로 내 쿼리에서 반환 한?

답변

2

실제로 Java Bean 패키지의 일부를 조사하고 디버깅 한 후에 무슨 일이 일어나고 있는지 알았습니다.

체인 세터는 Java Bean 사양을 준수하지 않습니다.

첫째 : 할 일 두 가지 옵션 QueryDsl 내 빈을 초기화하는 몇 가지 반성을 그 이유로는 "체인 세터"를 반환하지 않는 getWriteMethod 방법 ...

그래서 내가 거기에 생각을 호출입니다 Java Bean 스펙을 존중하는 chain setter가 아닙니다.

두 번째 :Projections.bean() 메서드를 사용하는 대신 Projections.fields()을 사용하십시오. 이 마지막 메서드는 setter를 사용하지 않습니다. 따라서 그것은 귀하의 필요에 따라 좋거나 다를 수 있습니다 ...