Использование Orika вместо Spring Data Commons

Существует несколько проектов Spring Data, таких как Neo4j, которые используют Spring Data Commons для создания PersistentEntity/PeristentProperty (в основном информация о типах плюс средства получения и установки свойств) и EntityConverter для переноса из собственного хранилища на Java. Это то, что делает SDN (Spring Data Neo4j), а также связывает преобразователи BeanWrapper, чтобы убедиться, что определенные типы свойств разрешены для структуры данных Neo4j.

По сути, Java-бины помечаются аннотацией @NodeEntity, и при записи они разбиваются на узлы (представьте, что это bean-компонент только с простыми свойствами), связанные объектами отношений.

Интересно, смогу ли я сделать то же самое с Орикой? Означает идентификацию классов с помощью аннотации и обработку каждого свойства при сложной рекурсии. Например:

 @NodeEntity
 class Software {
    String name;
    ....
    Organisation organisation;
    ....
 } 

 @NodeEntity
 class Organisation {
    String name;
 }

Должен состоять из 2 узлов, каждый из которых содержит свойство name и объект отношения (обозначает организацию как член программного обеспечения).


person Matthew Campbell    schedule 19.03.2013    source источник


Ответы (1)


Вот пример Orika ClassMapBuilder, поддерживающий пользовательские аннотации, я думаю, вы можете адаптировать его под свои нужды.

Суть: AnnotationClassMapBuilder

Для Node (или DBObject MongoDB) вы можете использовать пользовательский преобразователь свойств, взгляните на: http://orika-mapper.github.com/orika-docs/advanced-mappings.html (ElementPropertyResolver)

Изменить

Orika создает мапперы с помощью карты классов, которые на самом деле представляют собой просто набор пары свойств, свойство может быть любым, у которого есть имя, тип и установщик и/или геттер.

Вы можете автоматически создать для каждого атрибута в ваших bean-компонентах эквивалент на стороне Neo4J и позволить Orika построить картограф.

Например, вы можете создать сопоставитель Person(name)->PrintStream, в котором вы создаете для свойства каждого человека (имя) эквивалент, который печатает данные (System.out)

Пример

final Builder name = new Property.Builder()
                          .name("name")
                          .type(String.class.getName())
                          .setter("append(\"My name : \").append(%s).append('\\n')");       
factory.classMap(Person.class, PrintStream.class).fieldMap("name", name, false).add().register();

factory.getMapperFacade().map(person, System.out); // This print to default output stream, My name : xxxx
person Sidi    schedule 21.03.2013
comment
Спасибо за информацию. Интересно, не могли бы вы объяснить, как отношения могут быть нанесены на карту Орика. Отношения Neo4j — это просто клей для связывания сложных свойств. Примеры, которые я видел с Orika, рисуют один класс в другом или многие не метаданные в более крупный компонент. - person Matthew Campbell; 22.03.2013
comment
Я имею в виду, что сложные свойства приведут к двум классам: узлу и объекту отношения, связывающему его с родителем. Плюс переход от узлов/отношений Neo4j к большому бобу. - person Matthew Campbell; 23.03.2013
comment
Симо, большое спасибо! Очень ценю помощь и информацию. Попробую и сделаю об этом блог. - person Matthew Campbell; 25.03.2013
comment
Добро пожаловать :) в любое время, если у вас есть вопрос, не стесняйтесь, просто напишите письмо на orika-discuss в googlegroups. - person Sidi; 25.03.2013