如何使用namedNativeQuery指定entityGraph?

时间:2016-12-14 16:59:16

标签: hibernate jpa spring-data-jpa

使用NamedNativeQuery时是否可以设置namedEntityGraph?

我按如下方式获取用户实体:

try {
    return (User) em.createNamedQuery("OAuthToken.getUser")
            .setParameter("token", accessToken)
            .setParameter("expirationInterval", expirationInterval)
            .setHint("javax.persistence.fetchgraph", "User.withProjectsMemberOf")
            .getSingleResult();
} catch (NoResultException e) {
    return null;
}

entityGraph:

@NamedEntityGraphs({
    @NamedEntityGraph(name = "User.withProjectsMemberOf",
            attributeNodes = @NamedAttributeNode("projectsMemberOf")),
})

但是我收到以下警告:

设置了javax.persistence.fetchgraph提示,但该值不是EntityGraph!

那么可以使用命名的本机查询设置实体图吗?

我目前正在为过滤器中的当前REST请求设置用户。我希望能够根据匹配资源方法中存在的注释为用户动态获取entityGraph。

我使用的是spring-data-jpa,hibernate和jersey

1 个答案:

答案 0 :(得分:1)

您需要实例化EntityGraph,就像这样

EntityGraph myEG = em.getEntityGraph("User.withProjectsMemberOf");

然后设置fetchgraph,就像这样

query.setHint("javax.persistence.fetchgraph", myEG);