2014-11-21 2 views
1

약간의 문제가 있습니다. JPA Criteria를 사용하여 동적 선택 (Where 절이 선택적 변수를 가질 때 기준을 사용하여 ...)을 만들지 만 내 엔티티 중 하나에 사용자 열을 포함하고 사용자 ID를 확인해야하는 EmbeddedId가 있습니다.JPA EmbeddedId의 조건 및 조건

여기 내 사업체입니다.

@Entity 
@Table(name = "user_like") 
public class UserLike extends AbstractTimestampEntity implements Serializable { 

    @EmbeddedId 
    private UserLike.userLikePK userLikePK= new UserLike.UserLikePK(); 
    ... 
    with all the setter and gets 
    ... 

    @Embeddable 
    public static class UserLike implements Serializable{ 
     @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY) 
     @JoinColumn(name = "user_id") 
     private User user; 

     ... (and an other column, not important for now= 
    } 
} 

사용자 지금이 내 쿼리 모습입니다 열 사용자 ID를

를 포함하는 다른 엔티티입니다.

Root<Poi> p = cq.from(Poi.class); 
Join<Poi,UserLike> ul = p.join("userLike"); 


List<Predicate> predicates = new ArrayList<Predicate>(); 
Predicate predicate = cb.like(cb.upper(p.<String>get("name")), "%" + poiName.toUpperCase() + "%"); 
predicates.add(predicate); 

Predicate predicate2 = cb.equal(ul.get("userLikePK.user.idUser"), userId); 
predicates.add(predicate); 

//multi select because i need some info from p and ul as well.... 
cq.multiselect(p, ul); 

는 이제 predicate2 분명히 나에게 오류가 발생 "과 속성을 찾을 수 없습니다하여 지정된 이름 [userPoiLikePK.user.idUser]"

누군가가 내 "동일한"술어에 추가하는 방법을 말해 줄 수

사용자 ID?

추신 :이 내가 보관할 PA 쿼리입니다 :

SELECT p,ul FROM Poi p LEFT JOIN p.userLike ul WHERE p.name like :name AND ul.user.idUser=:userId 

감사합니다!

답변

2

get을 연결해야합니다.

Predicate predicate2 = cb.equal(ul.get("userLike").get("user").get("idUser"), userId); 
+0

감사합니다. – Johny19