1

有几个 Spring Data 项目,例如 Neo4j,它们使用 Spring Data Commons 来构建 PersistentEntity/PeristentProperty(基本上是类型信息加上属性获取器和设置器)和 EntityConverter 从本地存储滚动到 Java。这就是 SDN (Spring Data Neo4j) 所做的加上捆绑 BeanWrapper 转换器以确保 Neo4j 数据结构允许某些属性类型。

基本上,Java bean 带有 @NodeEntity 注释,并且 bean 在写入由关系对象互连的节点(认为只有简单属性的 bean)时被分解。

想知道我是否可以对 Orika 做同样的事情?意味着通过注释识别类并在递归复杂时处理每个属性。例如:

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

 @NodeEntity
 class Organisation {
    String name;
 }

应该滚动到 2 个节点中,每个节点包含属性名称和关系对象(将组织表示为软件的成员)。

4

1 回答 1

3

这是一个支持自定义注释的 Orika ClassMapBuilder 示例,我认为您可以对其进行调整以满足您的需求。

要点:AnnotationClassMapBuilder

对于 Node(或 MongoDB 的 DBObject),您可以使用自定义属性解析器,请查看: http ://orika-mapper.github.com/orika-docs/advanced-mappings.html (ElementPropertyResolver)

编辑

Orika 通过 class-map 构建映射器,实际上只是属性对的集合,属性可以是任何具有名称、类型和 setter 或/和 getter 的东西。

您可以在 Neo4J 端自动为 bean 中的每个属性创建一个等效项,并让 Orika 构建映射器。

例如,您可以创建一个 Person(name)->PrintStream 映射器,在其中为每个人的属性 (name) 创建一个等效于打印数据 (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
于 2013-03-21T10:39:42.960 回答