如何在 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 项目中使用 @Version

通过 spring-data 迭代 MongoDB 中的大型集合

使用 Eclipse Scala IDE 中的 spring-data 注入测试 playframework 2.4

如何将 @Transactional 与 Spring Data 一起使用?

如何使用 matplotlib 子图进行多行布局