Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sintaxis JQPL过滤器列表_Java_Jpql - Fatal编程技术网

Java Sintaxis JQPL过滤器列表

Java Sintaxis JQPL过滤器列表,java,jpql,Java,Jpql,我需要一些帮助 我有这两张桌子 public class Publication implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "idPublication")

我需要一些帮助

我有这两张桌子

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;

    ....
}
我需要得到带有问题的出版物,这些问题谁有活动=真。 示例:我有出版物A和出版物B,其中A有5个问题,2个活动,B有6个问题,5个活动

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

我找不到解决这个问题的办法

请帮忙


问候

由于JPQL查询返回的实体反映了数据库或持久性上下文中的内容,因此您无法准确地执行所需操作。换句话说,当您从JPQL查询中选择一个实体时,您将获得整个实体—您无法过滤其关系,因为这样实体将不再反映数据库中的内容

在您的示例中,您实际上是在选择至少有一个活动问题的出版物

要解决您的问题,您可以构建一个活动问题的发布地图。大概是这样的:

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);
}
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);
}