jpa - 在嵌入对象上使用 CriteriaBuilder

标签 jpa eclipselink metamodel embeddable

我正在尝试使用 @EmbeddableCriteriaBuilder过滤父结果 Entity基于嵌入的属性。我使用 Eclipse Link 来生成元数据类。
这是嵌入的类/实体:

@Embeddable
public class Stamp implements Serializable {

   @Basic()
   @Column(name = "stamp_year", nullable = false)
   private int year;
父类具有 Stamp作为成员(member):
@Entity(name = "Message")
public class Message implements Serializable {

   @Embedded
   private Stamp stamp = new Stamp();
现在这段代码应该使用 Message基于嵌入的类属性年份分类和过滤结果:
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Message> cq = cb.createQuery(Message.class);
    Root<Message> root = cq.from(Message.class);
    Predicate p = cb.conjunction();
    p = ??????
    cq.where(p);
    TypedQuery<Message> tq = em.createQuery(cq);
    List<Message> messages = tq.getResultList();
在第 5 行,如何到达查询的 Message->Stamp->Year 元素?
这是生成的元模型类:
@StaticMetamodel(Message.class)
public class Message_ { 

    public static volatile SingularAttribute<Message, Stamp> stamp;
和:
@StaticMetamodel(Stamp.class)
public class Stamp_ { 

   public static volatile SingularAttribute<Stamp, Integer> year;
注意:为了代码清晰,我删除了所有不相关的信息,但完整的代码可以在 GitHub 上找到:
prototype

最佳答案

基于条件的查询可能如下所示:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Message> cq = cb.createQuery(Message.class);
Root<Message> root = cq.from(Message.class);

Predicate p = cb.conjunction();
ParameterExpression<Integer> year = cb.parameter(Integer.class, "year");
p = cb.and(p, cb.equal(root.get(Message_.stamp).get(Stamp_.year), year));

cq.where(p);

TypedQuery<Message> tq = em.createQuery(cq).setParameter("year", 2015);
List<Message> messages = tq.getResultList();

关于jpa - 在嵌入对象上使用 CriteriaBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27739559/

相关文章:

java - 如何调试 JPA CriteriaBuilder 查询

java - OSGi、JPA Eclipselink、Postgresql : Caused by: java. lang.ClassNotFoundException : org. 无法找到 eclipse.persistence.jpa.PersistenceProvider

java - EclipseLink 文档没有解释 "session"

jpa - JPA 2从元模型中删除/插入订单

java - 尝试使用 Java 和 MetaModel API 查询 .CSV 文件

模型、元模型和元元模型

java - 域类中的属性未映射到表

java - Hibernate JDBC 批量大小不起作用

java - entityManagerFactory 未命名时 "entityManagerFactory"

java - 在 JPA (eclipselink) 的 UPDATE CASCADE 上创建外键