2014-01-31 3 views
0

도움이 필요합니다.Sintaxis JQPL 필터 목록

나는이 두 테이블

public class Publication implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idPublication") 
    private Integer idPublication; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "publication") 
    private List<Question> questionList; 

    .... 
} 

타블라 질문

public class Question implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idQuestion") 
    private Integer idQuestion; 

    @Basic(optional = false) 
    @NotNull 
    @Size(min = 1, max = 500) 
    @Column(name = "pregunta") 
    private String question; 

    @JoinColumn(name = "publication", referencedColumnName = "idPublication") 
    @ManyToOne(optional = false) 
    private Publication publication; 

    @NotNull 
    private Boolean activo; 

    .... 
} 

내가 진정한 활성이 질문 =와 출판물을 얻을 필요가있다. 예 : A에는 발행물 A와 발행물 B가 있습니다. 여기에서 A는 5 개의 질문과 2 개의 질문이 있고 B는 6 개의 질문과 5 개의 질문이 있습니다.

내가 수행하려고 "출판 P, 질문 가야에서 페이지를 선택 곳 p.idPublication = que.publication.idPublication 및 que.activo = 1"하지만 모든 질문 게시를 반환 ...

나는이

에 대한 해결책을하시기 바랍니다 finde

답변

0

당신은 할 수있을하지 않을거야 접견하는 데 도움이 어차피 정확히 엔티티가에서 반환하기 때문에 당신이 원하는 것을 JPQL 쿼리는 데이터베이스 (또는 지속성 컨텍스트)에있는 내용을 반영합니다. 즉, JPQL 쿼리에서 엔티티를 선택하면 엔티티 전체를 가져 오는 것입니다. 엔티티가 데이터베이스의 내용을 더 이상 반영하지 않기 때문에 관계를 필터링 할 수 없습니다.

예를 들어 Question이 1 개 이상 활성 인 Publication을 선택했습니다.

MapPublication을 활성화하여 Question 초로 만들 수 있습니다. 다음과 같은 내용 :

TypedQuery<Question> query = 
    em.createQuery("select q from Question q where q.activo = true", Question.class); 
List<Question> activeQuestions = query.getResultList(); 

Map<Publication, List<Question>> publicationToActiveQuestions = new HashMap<>(); 
for (Question q : activeQuestions) 
{ 
    List<Question> publicationQuestions = publicationToActiveQuestions.get(q.getPublication()); 
    if (publicationQuestions == null) 
    { 
    publicationQuestions = new ArrayList<>(); 
    publicationToActiveQuestions.put(q.getPublication(), publicationQuestions); 
    } 
    publicationQuestions.add(q); 
}