【问题标题】:JPA NamedQuery Select specific column and return class typeJPA NamedQuery 选择特定列并返回类类型
【发布时间】:2017-04-16 14:37:45
【问题描述】:

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

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

如何返回对象类型?

【问题讨论】:

标签: java mysql jpa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2016-04-04
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多