如何在 spring-data 中使用子图(使用休眠)?
Posted
技术标签:
【中文标题】如何在 spring-data 中使用子图(使用休眠)?【英文标题】:How to use subgraph in spring-data(with hibernate)? 【发布时间】:2015-11-14 08:44:58 【问题描述】:我正在通过 spring data 使用 spring boot 1.2.5 和 Hibernate 4.3.10,我编写了下面的代码。 我想使用子图,以便在获取名为“content.search”的实体图时可以检索数据。 这是我的代码。
@NamedEntityGraphs(@NamedEntityGraph(name = "content.search",
includeAllAttributes=true,
attributeNodes =
@NamedAttributeNode("mstItem")
,@NamedAttributeNode(value="itemTypeGraph",subgraph="itemTypeGraph")
, subgraphs = @NamedSubgraph(name = "itemTypeGraph",
attributeNodes = @NamedAttributeNode("mstItemType")
,@NamedAttributeNode("mstItemName")
)
))
public class Content implements java.io.Serializable ...
当我指定此行时,它会产生如下错误。(没有此行,它可以正常工作,但无法将子图中的数据检索为 EAGER 类型(稍后可以检索为 LAZY)
,@NamedAttributeNode(value="itemTypeGraph",subgraph="itemTypeGraph")
这是我遇到的错误。
[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: 调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException:无法找到属性 此 ManagedType 上的给定名称 [itemTypeGraph] [com.example.domain.Content]
从另一个问题来看,这个错误似乎在hibernate 4.3.9或更高版本之前修复了,但是我仍然遇到这个错误并且无法在子图中获取数据...为什么找不到itemTypeGraph
?我应该如何更改代码?
【问题讨论】:
我怀疑该错误尚未修复或...我的代码有问题。 任何人都可以使用 spring-data 的 subgraph 函数吗?如果是这样,我想看看这个程序...... 【参考方案1】:子图必须在它应该应用到的属性节点上定义。
所以正确的定义应该是这样的:
@NamedEntityGraph(name = "content.search", includeAllAttributes=true,
attributeNodes =
@NamedAttributeNode("mstItem", subgraph = "itemTypeGraph")
, subgraphs =
@NamedSubgraph(name = "itemTypeGraph", attributeNodes =
@NamedAttributeNode("mstItemType"), @NamedAttributeNode("mstItemName")
)
)
public class Content implements java.io.Serializable ...
【讨论】:
以上是关于如何在 spring-data 中使用子图(使用休眠)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring-data 中更改/定义 Mongodb 的默认数据库?
通过 spring-data 迭代 MongoDB 中的大型集合
使用 Eclipse Scala IDE 中的 spring-data 注入测试 playframework 2.4