CriteriaQuery抽象类列表

时间:2014-03-14 10:36:29

标签: java jpa criteriaquery

我有班级,文章,汽车

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 个答案:

答案 0 :(得分:0)

请记住,查询是多态的。

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