JPA-QL
声明我应该能够使用select s.message from Status s
查询实体,该实体在JPA-QL
控制台中有效。
但是,我真正想做的只是在返回列表中返回实体的特定属性,如下所示:
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<Status> getIt() {
EntityManager em = PersistenceManager.INSTANCE.getEntityManager();
List<Status> results = em.createQuery("select s.message from Status s").getResultList();
return results;
}
然而,错误消失了,根本没有真正的错误消息。 我可以看到Hibernate运行了这个查询:
Hibernate:
select
status0_.ID as col_0_0_
from
LIBRARY.TABLE status0_
传统的select s from Status s
效果很好:
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<Status> getIt() {
EntityManager em = PersistenceManager.INSTANCE.getEntityManager();
List<Status> results = em.createQuery("select s from Status s").getResultList();
return results;
}
答案 0 :(得分:1)
如果您只想检索实体的一个原语,getResultList()
将返回一个List&lt;&gt;这个原始的。
在您的情况下,如果s.message
为String
,则结果类型为List<String>
。
但是,我们经常使用的不仅仅是一个元素。通常,我们使用构造函数表达式。它们非常强大,因为我们可以将带有连接的查询映射到一个数据对象,或者 - 在您的情况下 - 只选择我们真正想要的字段。
假设传输对象如下:
public class TO {
Long id;
String message;
public TO(Long id, String message) {
this.id = id;
this.message = message;
}
然后你可以创建一个查询(我更喜欢TypedQueries):
TypedQuery<TO> qry = em.createQuery("SELECT NEW org.mypackage.TO(s.id, s.message) FROM Status s", TO.class);
List<TO> myList = qry.getResultList();
希望这有帮助!
答案 1 :(得分:0)
List<Status> results = em.createQuery("select s.message from Status s").getResultList();
您正在查询状态消息,但键入List<Status>
。
我相信它应该是:
List results = em.createQuery("select s.message from Status s").getResultList();
因为你期望从getResultList()获得的是无类型列表。