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 抽象类列表的主要内容,如果未能解决你的问题,请参考以下文章