Запросы приложений Java8 и Spring Data Neo4j

У меня куча вопросов по Java 8 и SDN4. Я создал модель в Neo4j v3.0, немного поигрался с Cypher-запросами и теперь перешел к созданию Spring Boot-приложения. Когда я начал кодировать классы на Java, я также начал переосмысливать некоторые из своих моделей. Вот некоторые вопросы в моей голове (и я не нашел пример, объясняющий это):

  1. Вам нужно использовать интерфейсы в Java с SDN? Например, для. Я бы закодировал интерфейс Product, а затем реализовал бы его в своих продуктах, но так ли это делается при работе с метками?
  2. Это несколько связано с моим вопросом о наследовании — обычно у меня был ProductFamily, от которого наследовался мой Product. На уровне базы данных он моделируется как (:Product)-[PartOf]->(:ProductFamily), но в коде это не будет супер/подкласс.
  3. Любые примеры использования Generics в контексте графа?
  4. Есть ли способ определить ограничения на то, какие отношения может иметь узел, и их направление в Java?

Я понимаю, что, вероятно, нет ни одного правильного ответа, но в Интернете их очень мало, так что надеюсь получить просвещение здесь!


person aaaaarrrgghhh    schedule 12.06.2016    source источник


Ответы (1)


  1. Если у вас есть интерфейс продукта с аннотацией @NodeEntity, то у вас будет метка Product в дополнение к метке в вашем классе реализации, что, как я полагаю, вам нужно. Если ваш интерфейс не аннотирован, то ваши реализующие классы не будут наследовать от него метку.

  2. Не уверен, что вы имеете в виду - если вы говорите, что у вас есть ProductFamily, от которого наследуется Product, но в коде это не будет супер/подклассом? Основываясь на вашей графовой модели, если вы хотите (:Product)-[PartOf]->(:ProductFamily), у вас будет класс Product, который поддерживает ссылку на класс ProductFamily, и эта ссылка будет аннотирована @Relationship. Если класс Product наследуется от ProductFamily, то сохранение Product приведет к двум меткам — Product и ProductFamily, потому что Product IS-A ProductFamily.

  3. Как вы видите себя, используя дженерики - ответ действительно зависит от этого. Некоторые случаи поддерживаются, некоторые нет (примером чего-то, что не поддерживается прямо сейчас, является эквивалент template.createRelationBetween в SDN4)

  4. Да, через аннотацию @Relationship, которая принимает type и direction. Обратите внимание, что эта аннотация ограничивает только вашу модель предметной области, но вы вполне можете пренебречь этим, создав отношения в другом направлении с помощью пользовательского запроса.

person Luanne    schedule 13.06.2016
comment
Благодарю вас! Что касается (2) и (3), идея состоит в том, что я мог бы работать с коллекциями на основе ProductFamily как с универсальными, даже если у меня есть продукты, возвращаемые в запросе. И большинство свойств определены в классе ProductFamily, а класс Product имеет только свойства, специфичные для него. Например. Пользовательские запросы для всех Product, поддерживающих определенную функцию - я могу затем вернуть ProductFamily, если это функция для всей семьи, и некоторые конкретные Product, если это не так, но моя коллекция такая же. Надеюсь, это имеет смысл! - person aaaaarrrgghhh; 13.06.2016
comment
Да, возможно, хотя у вас будет две метки на узлах Product (Product и ProductFamily). - person Luanne; 13.06.2016