JPA NamedQuery选择特定列和返回类类型

时间:2016-12-01 20:03:40

标签: java mysql jpa

我正在使用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"}]

我让这更简单,以显示我在这里尝试做什么,实际的表有更多的列,但它是相同的主体。

如何返回对象类型?

1 个答案:

答案 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()