当前位置: 首页 > 知识库问答 >
问题:

Spring Data Rest Neo4j输出中引用实体上未公开的非关系属性

金坚
2023-03-14

我正在编写一些代码,这些代码使用spring-data-neo4j(SDN)和spring-data-rest-mvc来存储和访问具有循环特性的图形数据。我正在使用SpringDataRESTMVC访问HATEOAS功能,以允许客户端通过以下链接导航图形。

作为一个简单的例子,我从http://spring.io/guides/gs/accessing-neo4j-data-rest/并通过一种社会层面,即“朋友”来强化人物阶层:

@RelatedTo(type = "FRIENDS_WITH", direction = Direction.BOTH)
Set<Person> friends = new HashSet<Person>();

i、 e.人员实例之间的双向关系。

我加载了一组样本数据,并在它们之间建立了随机的朋友关系。到目前为止一切都很好。

如果我击中

http://localhost:8080/people/408 

我得到了预期的:

{
  "firstName" : "Remona",
  "lastName" : "Heier",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/people/408"
    },
    "friends" : {
      "href" : "http://localhost:8080/people/408/friends"
    }
  }
}

如果我击中

http://localhost:8080/people/408/friends

然而,我明白了

{
  "_embedded" : {
    "people" : [ {
      "firstName" : null,
      "lastName" : null,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/people/189"
        },
        "friends" : {
          "href" : "http://localhost:8080/people/189/friends"
        }
      }
    }, {
      "firstName" : null,
      "lastName" : null,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/people/34"
        },
        "friends" : {
          "href" : "http://localhost:8080/people/34/friends"
        }
      }
    }
  }
}

其中包含firstName和lastName的空值。

直接打那些朋友中的一个。

http://localhost:8080/people/189

我得到:

{
  "firstName" : "Zita",
  "lastName" : "Speltz",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/people/189"
    },
    "friends" : {
      "href" : "http://localhost:8080/people/189/friends"
    }
  }
}

我明白为什么我会得到空值——朋友集上没有@Fetch,所以朋友实际上并没有被取走——只有节点id是已知的,用于构建自我和朋友href。但是用空值产生的输出是错误的——这是对数据的误报。

我不能将@Fetch包含在好友集中,因为那样会使应用程序旋转并溢出堆栈,所以我就被卡住了。我想查看列出好友时显示的好友的非关系属性,即我想查看:

{
  "_embedded" : {
    "people" : [ {
      "firstName" : "Zita",
      "lastName" : "Speltz",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/people/189"
        },
        "friends" : {
          "href" : "http://localhost:8080/people/189/friends"
        }
      }
    }, {
      "firstName" : "Ciara",
      "lastName" : "Cobbley",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/people/34"
        },
        "friends" : {
          "href" : "http://localhost:8080/people/34/friends"
        }
      }
    }
  }
}

有谁知道我是怎么做到的吗?

非常感谢提前。

共有1个答案

鲁斯伯
2023-03-14

这似乎是spring数据或spring数据rest中的错误。我使用SpringDataREST2.3在延迟获取的实体上遇到了同样的问题。0和spring数据jpa。我能够获得您想要的输出(即实际显示的实体信息)的唯一方法是急切地获取相关实体。你说你不能这么做,所以我看到的唯一选择是你自己编写一个返回正确数据的控制器。您只需要覆盖引用实体的requestMappings,因为spring数据rest控制器仍将处理您的控制器不处理的任何requestMappings。spring restbucks项目有一个自定义控件的示例:

https://github.com/olivergierke/spring-restbucks/blob/master/src/main/java/org/springsource/restbucks/payment/web/PaymentController.java

您需要添加一个方法来处理“/people/{id}/friends”请求映射,并使用数据和链接填充资源。

 类似资料:
  • 我使用的是Netbeans IDE 8.0.2和eclipselink 2.5.2。下面是打开连接时出现的异常,问题是这种情况并不是每次都发生。异常“Departmento”中描述的实体完全遵循其他类的模式,即我们的系统已经包含大约500个实体类,只有在新的类中才发生此异常。这个实体是由Netbeans的“实体类从数据库”选项生成的,并添加到持久化XML... 由:javax.Persistenc

  • 我对Meal和MealGroup之间的关系有问题。Hibernate返回给我:"mappdBy引用未知的目标实体属性"。我有两个实体: 我尝试删除@Join Column和mappedBy。已创建其他表,但我想加入该列。 和 谢谢你的帮助。

  • 关联实体和关联关系属性有什么区别?在我的一本名为《现代数据库管理》(Hoffer,第11版)的书中,作者陈述了两者之间的区别。然而,它并没有真正解释为什么会有差别,相反,它只是给出了它们是如何不同的例子。 据我所知,一个有一个属性关联的关系是一个关联关系属性,并用一条虚线表示一个圆角矩形,该矩形内有该属性。而关联实体是描述关系的多个属性。两者都只能用于ER图解中的多对多关系。我的思维过程正确吗?

  • 您好,我是JPA Spring boot的新手,现在我正在尝试将两个表之间的连接转换为第三个表。所以我有一个医生和病人表,其中有它的属性,一个医生可以检查每个病人,一个病人可以看望每个医生。但是在一次检查中,不能有超过一个病人和一个医生。对于医生,我想保留他们检查过的患者的信息,分别是患者的信息,以及他们检查过的医生的信息。我想创建一个名为DoctorVisit的中间表,其中我有做检查的医生的id

  • 问题内容: 我在被注释的对象中建立一对多关系时遇到问题。 我有以下几点: 然后这个 和这个 我在这里做错了什么 问题答案: 该属性正在引用,而该属性是,因此出现错误消息。因此,请将您的映射更改为: 或者将实体属性更改为(这就是我要做的)。 mapledBy参考指示“在我有一个用于查找配置的集合的东西上查找名为’customer’的bean属性。”

  • 问题内容: 在JPA 2.0规范 说,第22页: 类的实例变量必须是私有的,受保护的或程序包可见性,而与使用字段访问还是属性访问无关。使用属性访问时,属性访问器方法必须是公共的或受保护的。 为什么不允许公共访问? 问题答案: 对于公共字段,将没有办法使代理可靠地工作-如果有人直接访问字段,那么持久性框架就没有简单的方法来拦截该调用并(例如)初始化包含对象(如果它是代理) 。 如果无法进行字段访问,