有几个像Neo4j这样的Spring Data项目使用Spring Data Commons来构建PersistentEntity / PeristentProperty(基本上是类型信息加属性geters和setter)和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个节点,每个节点包含属性名称和关系对象(表示组织为软件成员)。
答案 0 :(得分:3)
以下是支持自定义注释的Orika ClassMapBuilder示例,我认为您可以根据自己的需要进行调整。
Gist : AnnotationClassMapBuilder
对于Node(或MongoDB的DBObject),您可以使用自定义属性解析器,看看: http://orika-mapper.github.com/orika-docs/advanced-mappings.html(ElementPropertyResolver)
修改强>
Orika通过类映射构建映射器,实际上,只是属性对的属性集合,可以是任何具有名称,类型和设置器或/和getter的东西。
您可以自动为Bean中的每个属性创建Neo4J中的等效项,并让Orika构建映射器。
例如,您可以创建一个Person(名称) - > 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