CriteriaQuery 抽象类列表

Posted

技术标签:

【中文标题】CriteriaQuery 抽象类列表【英文标题】:CriteriaQuery list of abstract class 【发布时间】:2014-03-14 10:36:29 【问题描述】:

我有订单、文章、汽车等课程

public class Order
private List<Article> articles;


public abstract class Article
private int id;


public class Car extends Article
private String color;


public class Book extends Article
private String title;

如何使用条件查询来检查属于汽车的文章?

【问题讨论】:

【参考方案1】:

记住查询是多态的。

CriteriaQuery<Order> q = cb.createQuery(Order.class);
Root<Order> order = q.from(Order.class);
Join<Order,Article> article = order.join("articles", JoinType.LEFT);
q.select(order)
.where(cb.equal(article.type(), Car.class));

您可以使用 type() 来限制类的类型以及您只想检索的子类。

为了获得颜色属性,你必须执行TypedQuery并对其进行迭代。

TypedQuery<Order> qw = em.createQuery(q);
List<Order> orderList = qw.getResultList();

来自orderList.get(index).getArticles().get(indexOfArticles).getColor();

为了给汽车颜色添加一个子句。

CriteriaQuery<Order> q = cb.createQuery(Order.class);
Root<Order> order = q.from(Order.class);
Join<Order,Car> article = order.join("articles", JoinType.LEFT);
q.select(order)
.where(cb.equal(article.get("color"), "red"),cb.equal(article.type(), Car.class));

【讨论】:

我如何访问颜色属性? 在我的 cmets 中更新 但我想在 where 子句中使用它。我想要所有包含红色汽车的订单? 我得到:原因:java.lang.IllegalArgumentException:无法针对路径 [null] 解析属性 [color]

以上是关于CriteriaQuery 抽象类列表的主要内容,如果未能解决你的问题,请参考以下文章

抽象类

抽象类

PHP 抽象类

包含抽象超类列表的类,我需要#include所有子类吗?

Java集合总结:列表和队列

面向对象:继承抽象类抽象方法虚方法