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

通过Rest获取实体时,Spring数据Neo4j Rest显示StartNode和EndNode

潘高岑
2023-03-14

我对sping-data-neo4j-rest有一个非常简单的问题:因为我在我的@NodeEntity中放置了@RelatedToVia关系,@StartNode和@EndNode出现在我的GET中,就像下面的JSON一样:

{
   "_embedded":{
      "fields":[
         {
            "label":"Field 1",
            "_links":{
               "self":{
                  "href":"http://localhost/fields/5"
               },
               "startField":{
                  "href":"http://localhost/fields/5/startField"
               },
               "endField":{
                  "href":"http://localhost/fields/5/endField"
               },
               "fieldValues":{
                  "href":"http://localhost/fields/5/fieldValues"
               },
               "form":{
                  "href":"http://localhost/fields/5/form"
               }
            }
         }
      ]
   }
}

我的问题是:为什么会发生这种情况,因为开始节点和结束节点不是节点实体的一部分,我如何防止这种行为发生?

如果我的问题格式不好,请提前道歉,这里的第一个问题,如果有人要求,我将进行编辑。

非常感谢。

==其他信息====

这是我的申请表

 @Configuration
    @EnableNeo4jRepositories
    @Import(RepositoryRestMvcConfiguration.class)
    @EnableAutoConfiguration
    public class Application extends Neo4jConfiguration {

        public Application() {
            setBasePackage("com.oliverstore.badger.server");
        }

        @Bean(destroyMethod = "shutdown")
        public GraphDatabaseService graphDatabaseService() {
            return new GraphDatabaseFactory().newEmbeddedDatabase("/opt/ostore/badger/data/badger-server.db");
        }

        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

简而言之,我只在这里粘贴一个节点和关系实体,它们都是问题。

节点:

@NodeEntity
public class Field {

    @GraphId private Long id;

    @Indexed(unique = true)
    private String label;

    @RelatedTo(type="HAS_FIELD", direction=Direction.BOTH)
    private @Fetch Form form;

    @RelatedTo(type="HAS_VALUE", direction=Direction.BOTH)
    private @Fetch Set<FieldValue> fieldValues = new HashSet<FieldValue>();

    @RelatedToVia(type="EVENTS_WITH")
    @Fetch private Set<Event> events = new HashSet<Event>();

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public Form getForm() {
        return form;
    }

    public void setForm(Form form) {
        this.form = form;
    }

    public Set<FieldValue> getFieldValues() {
        return fieldValues;
    }

    public void setFieldValues(Set<FieldValue> fieldValues) {
        this.fieldValues = fieldValues;
    }


    public void add(Field targetField, String propertyLabel, String valueLabel){
        Event event = new Event(this, targetField, propertyLabel, valueLabel);
        this.events.add(event);
    }
}

关系:

@RelationshipEntity(type="EVENTS_WITH")
public class Event {

    @GraphId private Long id;

    @StartNode
    private Field startField;
    @EndNode
    private Field endField;

    String propertyLabel;
    String valueLabel;

    public Event(){
    }

    public Event(Field startField, Field endField, String propertyLabel,
            String valueLabel) {
        this.startField = startField;
        this.endField = endField;
        this.propertyLabel = propertyLabel;
        this.valueLabel = valueLabel;
    }

    public String getPropertyLabel() {
        return propertyLabel;
    }
    public String getValueLabel() {
        return valueLabel;
    }

}

共有1个答案

许丁雷
2023-03-14

您可以使用@JsonIgnore注释忽略Json中的关系实体。

@RelatedToVia(type="EVENTS_WITH")
@Fetch 
@JsonIgnore
private Set<Event> events = new HashSet<Event>();
 类似资料:
  • 我有一个SpringBoot项目,它使用SpringDataREST生成我的rest接口,我正在尝试允许对嵌套资源进行分页。我遵循了这一解决方法,并陷入了实现findBy查询的困境。 我有以下设备实体: 我需要使用userId查询它: 因此,我在DevicePository中创建了以下方法: 但我在尝试向该endpoint发送请求时遇到以下异常: 有人能告诉我我做错了什么吗? 编辑:谢谢你的回复,

  • 我正试图找到在ORM上映射我的数据的最佳方法。我有一个从MySQL数据库中获取数据的查询 用spring boot和spring的数据获得这些数据的最优方法是什么?? 我应该使用@query注释并执行它还是以某种方式为Equipment and Devices表创建实体,然后使用JPQL/HQL将表连接到查询中,但是我应该如何映射结果? 提前道谢。

  • 我正在用Spring Boot测试Neo4j,当我试图使用Rest API插入元素时,我发现了以下问题,我得到了JSON不能序列化到实体的错误。如果有人能帮助我或解释如何更改我的代码或如何序列化该实体,我将不胜感激。我的课是...用户实体 Adrress实体 国家实体 抽象实体 面向商店用户的简单存储库类 我的服务课 我的控制器类 这是我尝试建模的简单方案(Neo4j是一个NoSQL数据库,没有大

  • 我想通过在父实体上调用保存来将父实体和子实体一起保存到MySQL数据库中。父实体和子实体之间有一对一的映射。父ID是自动生成的,我们需要在子实体中使用与子实体相同的pk。 我使用的是Spring数据JPA2.0(JPA提供程序是Hibernate)和Spring MVC框架。当尝试插入实体时,我遇到以下错误。 根本原因 这是我的数据库模式: 以下是我的Java实体父实体: 儿童性: 这是我的主要方

  • Spring数据REST(尤其是Spring HATEOAS)将RESTful ID(即URI)与实体ID解耦,在保存新对象时,我很难将它们链接起来。有关此解耦的有趣讨论,请参见https://github.com/SpringSource/spring-data-rest/issues/13. 假设一个客户端应用程序想要创建一个新的票证资源和一个关联的票证类别资源。我想针对远程Spring数据R

  • 我制作了一个自定义方法,该方法应用@Query注释以从 SQL 数据库中提取数据。该方法使用字符串和可分页作为参数。该 Pageable 包含我的分页信息,例如请求的页面、出现次数限制、排序方向和属性。 每当我的 Pageable 传递属性名称进行排序时,Hibernate 都会使用相同的名称在 DB 上查找列,即使我在模型上注释了另一个列名。我在示例查询或派生方法实现方面没有遇到此问题。 我已经