от
Я настраиваю P.O.C. используя Neo4j, и технически есть все, что мне нужно для работы, но хотелось бы, чтобы он был настроен правильно. В качестве краткого обзора - я могу создавать узлы и отношения и прослеживать график (то есть возвращать все функции, доступные на конкретном рынке), поэтому я знаю, что эти узлы / отношения были созданы. Однако, когда я запрашиваю просто вернуть узел на основе идентификатора, он возвращает ТОЛЬКО данные для этого узла, а не любые отношения или связанные узлы, например, рынки, на которых он доступен. Я просматривал различные места в Интернете, в которых возвращался не только узел, но и последующие узлы - хотя я слежу за тем, что они делают, не могу заставить его работать с моим. Репозиторий функций:
    @Repository
    public interface FeatureRepository extends Neo4jRepository {
    ...
    }
Цветовой репозиторий:
    @Repository
    public interface ColourRepository extends FeatureRepository{
        @Query("CREATE(feat:Colour:Feature {marketingDesc:{marketing}, engineeringDesc:{engineering}, code:{code}})")
        Colour createColour(@Param("marketing") String marketingDesc, @Param("engineering") String engineeringDesc, @Param("code") String code);

        @Query("MATCH (c:Colour {code:{colourCode}}) MATCH (c)

Особенность объекта:

    @NodeEntity(label = "Feature")
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public class Feature {
        @Id
        @GeneratedValue
        private Long id;
        private String marketingDesc;
        private String engineeringDesc;
        @Index(unique = true)
        private String code;

        @Relationship(type = "HAS_OPTION", direction = Relationship.INCOMING)
        private List options = new ArrayList<>();

        @Relationship(type = "AVAILABLE_IN")
        private List markets = new ArrayList<>();

        @Relationship(type = "HAS_PREREQUISITE", direction = Relationship.UNDIRECTED)
        private List prerequisites = new ArrayList<>();
    }
Цвет сущности:
    @AllArgsConstructor
    @NodeEntity(label = "Colour")
    public class Colour extends Feature {
    }
Субъект рынка:
    @NodeEntity(label = "Market")
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public class Market {
        @Id
        @GeneratedValue
        private Long id;

        @Index(unique = true)
        private String code;
        private String market;

        @Relationship(type = "AVAILABLE_IN", direction = Relationship.INCOMING)
        private List features = new ArrayList<>();
    }
Entity Entity (для связи функций с рынками, на которых они могут быть куплены):
    @RelationshipEntity(type = "AVAILABLE_IN")
    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public class Available {
        @Id
        @GeneratedValue
        private Long Id;
        private List availableIn = new ArrayList<>();

        @StartNode
        private Feature feature;
        @EndNode
        private Market market;
    }
контроллер:
    @RestController
    public class ConfigController {

        private final Handler configHandler;

        public ConfigController(Handler configHandler) {
            this.configHandler = configHandler;
        }

     @PostMapping(path = "/create/colour", consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
        public SimpleResponse createColour(@RequestBody Colour request) {
            ColourService service = new ColourService(configHandler);
            Colour created = service.createColour(request);
            return SimpleResponse.builder().result("Created:", created).build();
        }

        @PostMapping(path = "/create/market", consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
        public SimpleResponse createMarket(@RequestBody Market request) {
            MarketService service = new MarketService(configHandler);
            Market created = service.createMarket(request);
            return SimpleResponse.builder().result("Created", created).build();
        }

        @PostMapping(path = "/create/relationship/availableIn", consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
        public SimpleResponse createAvailableInRelationship(@RequestBody OptionAvailInRequest request){
            RelationshipService service = new RelationshipService(configHandler);
            Object result = service.createAvailableInRelationship(request);
            return SimpleResponse.builder().result("Result:", result).build();
        }

        @GetMapping(path = "/colour/{code}")
        public SimpleResponse getColourByCode(@PathVariable(value = "code") String code) {
            ColourService service = new ColourService(configHandler);
            Colour colour = service.getColourByCode(code);
            return SimpleResponse.builder().result("Colour:", colour).build();
        }

        @GetMapping(path = "/features/available/{mrktCode}")
        public SimpleResponse getFeaturesInMarket(@PathVariable(value = "mrktCode") String mrktCode){
            RelationshipService service = new RelationshipService(configHandler);
            Collection features = service.getFeaturesInMarket(mrktCode);
            return SimpleResponse.builder().result("Features:", features).build();
        }
    }
Файл Neo4jConfig:
    @Configuration
    @EnableNeo4jRepositories(basePackages = "package.location")
    @EnableTransactionManagement
    public class Neo4jConfig {
        @Bean
        public org.neo4j.ogm.config.Configuration configuration() {
            org.neo4j.ogm.config.Configuration configuration =
                    new org.neo4j.ogm.config.Configuration.Builder().build();


            return configuration;
        }

        @Bean
        public SessionFactory sessionFactory(org.neo4j.ogm.config.Configuration configuration) {

            return new SessionFactory(configuration,"package.location");
        }

        @Bean
        public Neo4jTransactionManager transactionManager(SessionFactory sessionFactory) {
            return new Neo4jTransactionManager(sessionFactory);
        }
    }
Так, например, здесь я могу создать Color Node: Пример значения:
{
  "code": "string",
  "engineeringDesc": "string",
  "id": 0,
  "marketingDesc": "string",
  "markets": [
    {
      "code": "string",
      "features": [
        {}
      ],
      "id": 0,
      "market": "string"
    }
  ],
  "options": [
    {}
  ],
  "prerequisites": [
    {}
  ]
}
Что я отправляю:
{
  "code": "BLU",
  "engineeringDesc": "Blue engineering",
  "marketingDesc": "Blue marketing"
}
И это успешно создает Color Node:
{
  "result": {
    "Created:": {
      "id": 0,
      "marketingDesc": "Blue marketing",
      "engineeringDesc": "Blue engineering",
      "code": "BLU",
      "options": [],
      "markets": [],
      "prerequisites": []
    }
  },
  "error": null
}
Я могу создать узел рынка: Пример значения:
{
  "code": "string",
  "features": [
    {}
  ],
  "id": 0,
  "market": "string"
}
Что я отправляю:
{
  "code": "UB",
  "market": "England"
}
Который успешно создает узел рынка:
{
  "result": {
    "Created": {
      "id": 1,
      "code": "UB",
      "market": "England",
      "features": []
    }
  },
  "error": null
}
Затем я могу создать отношения между ними, чтобы сказать, что цвет доступен на этом рынке:
{
  "featureCode": "BLU",
  "marketCode": "UB"
}
То, что я могу проверить, было создано, нажав: локальный: 8080 / функции / в наличии / UB
{
  "result": {
    "Features:": [
      {
        "id": 0,
        "marketingDesc": "Blue marketing",
        "engineeringDesc": "Blue engineering",
        "code": "BLU",
        "options": [],
        "markets": [],
        "prerequisites": []
      }
    ]
  },
  "error": null
}
Однако, когда я тогда возвращаюсь сам Color Color Node: локальный: 8080 / цвет / СИН
{
  "result": {
    "Colour:": {
      "id": 0,
      "marketingDesc": "Blue marketing",
      "engineeringDesc": "Blue engineering",
      "code": "BLU",
      "options": [],
      "markets": [],
      "prerequisites": []
    }
  },
  "error": null
}
Опция «market» всегда равна нулю. Я пробовал настраиваемые запросы и создавал запросы с помощью помощника neo4j (например, findByCode и т. Д.), И каждый пример, который я могу найти, будет успешно возвращать связанные узлы, но, похоже, я не могу найти свой. Кто-нибудь может помочь? Постскриптум Пожалуйста, дайте мне знать, если есть что-нибудь еще, что было бы полезно для вас. Пытался разобраться в этом в течение нескольких дней ....              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Получил ответ на этот вопрос ... Особенность объекта должна была быть:
    @Relationship(type = "AVAILABLE_IN")
    @ApiModelProperty(hidden = true)
    private Set
...