用于过滤子类的JPA CriteriaBuilder方法是什么?

Gra*_*Lay 4 java jpa criteria-api

JPA 2.0提供了一种使用JPQL表达式TYPE按子类进行过滤的方法,例如:

SELECT e
FROM entity e
WHERE TYPE(e) = :entityType
Run Code Online (Sandbox Code Playgroud)

其中参数entityType是鉴别器列的值.

考虑到鉴别器列似乎不受限制,建议使用JPA标准构建器实现相同的方法是什么?

我正在使用JPA 2.1,到目前为止唯一的解决方案是将鉴别器列映射为Java实体中的只读字段,但我不确定这是否是受支持的功能.

ozg*_*gur 7

常见查询的示例在这里

例:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
Root e = cq.from(Entity.class);
cq.where(cb.equal(e.type(), entityType));
Query query = em.createQuery(cq);
List<Entity> result = query.getResultList();
Run Code Online (Sandbox Code Playgroud)


Mat*_*ldi 5

您可以使用此处记录的Path 类型方法:

Predicate p = cb.equal(e.type(), cb.literal(Entity.class));
Run Code Online (Sandbox Code Playgroud)