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