【问题标题】:How to specify an entityGraph with a namedNativeQuery?如何使用 namedNativeQuery 指定 entityGraph?
【发布时间】:2017-04-30 02:39:48
【问题描述】:

使用 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;
}

实体图:

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

但是我收到以下警告:

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

那么是否可以使用命名的原生查询来设置实体图?

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

我正在使用 spring-data-jpa、hibernate 和 jersey

【问题讨论】:

  • 您将实体图的名称指定为“User.withProjectsMemberOf”,但将 fetchgraph 称为“User.withMemberProjects”。
  • @NeilStockton 很好,但我仍然遇到同样的错误

标签: hibernate jpa spring-data-jpa


【解决方案1】:

你需要实例化EntityGraph,像这样

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

然后设置fetchgraph,像这样

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

【讨论】:

  • 修复了警告,但是现在我得到:java.lang.ClassCastException: org.hibernate.internal.SQLQueryImpl 无法转换为 org.hibernate.internal.QueryImpl。有什么想法吗?
  • 发布你的实际代码和堆栈跟踪来自哪里。如果它是用于标准 JPA API 调用并且 Hibernate 抛出了它,那么它是您的 JPA 提供程序中的一个错误,您应该在它们上提出一个错误
猜你喜欢
  • 2020-12-08
  • 2017-12-05
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
相关资源
最近更新 更多