【发布时间】:2013-07-16 13:07:12
【问题描述】:
我有一个对象Admin,它扩展了User。默认情况下,这两个对象都在我的 Derby 数据库的表 User_ 中(包括来自 Admin 的字段)。通常我会像这样选择User:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root user= query.from(User.class);
Predicate predicateId = cb.equal(category.get("id"), id);
query.select(user).where(predicateId);
return em.createQuery(query).getSingleResult();
但是由于查询的复杂性,我使用的是这样的本机查询:
Query query = em.createNativeQuery("SELECT USER.* FROM USER_ AS USER WHERE ID = ?");
query.setParameter(1, id);
return (User) query.getSingleResult();
虽然这会引发强制转换异常。我认为这是由于 Admin 的任何字段造成的。
我的问题是,如何使用与第一个示例具有相同结果的本机查询选择 User(包括与 JPQL 查询返回的 @LOB 和 @ManyToOne (等等)相同的值) )?
【问题讨论】:
-
是什么让查询对于 JPQL 来说过于复杂?
-
@damo 这是一个缩短的例子,真正的查询包含许多子查询,
SUM、COALESCENSE、CASE等等。 -
检查这个答案。它有完整的答案:stackoverflow.com/a/50365522/3073945