Sintaxis JQPL过滤器列表

时间:2014-01-31 11:45:27

标签: java jpql

我需要一些帮助。

我有这两张桌子

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;

    ....
}

Tabla问题

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;

    ....
}

我需要使用active = true的问题来获取这些出版物。 示例:我有出版物A和出版物B,其中A有5个问题,2个有效,B有6个问题,5个有效。

我尝试做“从出版物p中选择p,问题,其中p.idPublication = que.publication.idPublication和que.activo = 1”但它返回出版物及其所有问题......

我无法找到解决方案

请帮忙

迎接

1 个答案:

答案 0 :(得分:0)

您无法完全您想要的东西,因为从JPQL查询返回的实体反映了数据库(或持久性上下文)中的内容。换句话说,当您从JPQL查询中选择一个实体时,您将获得整个实体 - 您无法过滤其关系,因为该实体将不再反映数据库中的内容。

在您的示例中,您实际上是在选择至少有1个有效Publication的{​​{1}}。

要解决您的问题,您可以为Question Map建立活跃Publication。像这样:

Question