我正在使用JPA,我有像这样的基本命名查询
@NamedQuery(name="Manifest.findAll", query="SELECT m FROM Manifest m")
当我打电话给你时,
entityManager.createNamedQuery("Manifest.getManifestInfo").getResultList()
我把对象放回到像这样的列表中
[{id:"1", name:"foo"},{id:"2", name:"bar"}]
然后我有另一个命名查询,我只是得到名称
@NamedQuery(name =“Manifest.getManifestName”,query =“SELECT m.name FROM Manifest m”)
当我运行该查询时,我得到了
[["foo"],["bar"]]
如何让第二个查询返回对象类型以便它的谎言
[{name:"foo"},{name:"bar"}]
我让这更简单,以显示我在这里尝试做什么,实际的表有更多的列,但它是相同的主体。
如何返回对象类型?
答案 0 :(得分:0)
JPA中该用例的功能是Entity Graph。
在您的实体上定义它:
@NamedEntityGraph(name="nameOnly", attributeNodes={
@NamedAttributeNode("name")
})
@Entity
public class Manifest {
...
}
您保持查询本身不变,但在运行之前将实体图应用于查询,可以是加载图或获取图(请参阅上面的链接以获取解释):
EntityGraph<EmailMessage> eg = em.getEntityGraph("nameOnly");
entityManager.createNamedQuery("Manifest.getManifestInfo").setHint("javax.persistence.loadgraph", eg).getResultList()