是否可以将Neo4j OGM转换器用作Spring@组件?

是否可以将Neo4j OGM转换器用作Spring@组件?,neo4j,converter,spring-data-neo4j-4,neo4j-ogm,Neo4j,Converter,Spring Data Neo4j 4,Neo4j Ogm,我有一个自定义转换器,注释为@组件,它依赖于MyBean,它是由Spring在启动时通过@Autowired注入的 MyEntity有一个要由该转换器转换的字段MyObject。当我从Neo4j检索MyEntity时,OGM将从MyObjectToString Converter调用toEntityAttribute。然而,我得到了一个NPE。OGM似乎没有重用Spring创建的转换器,MyBean依赖项总是空的 OGM应该能够从Spring上下文获取我的转换器吗 有没有办法用OGM初始化MyB

我有一个自定义转换器,注释为@组件,它依赖于MyBean,它是由Spring在启动时通过@Autowired注入的

MyEntity有一个要由该转换器转换的字段MyObject。当我从Neo4j检索MyEntity时,OGM将从MyObjectToString Converter调用toEntityAttribute。然而,我得到了一个NPE。OGM似乎没有重用Spring创建的转换器,MyBean依赖项总是空的

OGM应该能够从Spring上下文获取我的转换器吗

有没有办法用OGM初始化MyBean

如果没有,我可以自己注册转换器吗

@NodeEntity
class MyEntity {

    @Convert(MyObjectToStringConverter.class)
    private MyObject myObject;
    ...
}

@Component
class MyObjectToStringConverter implements AttributeConverter<MyObject, String> {

    @Autowired
    private MyBean myBean;

    @Override
    public String toGraphProperty(MyObject value) {
        return value.getName();
    }

    @Override
    public MyObject toEntityAttribute(String value) {
        return myBean.convert(value); // myBean is NULL
    }
}

...
repository.find(myEntityID) // NPE from MyObjectToStringConverter


java.lang.NullPointerException: null
    at org.myproject.mvc.converter.MyObjectToStringConverter.toEntityAttribute(MyObjectToStringConverter.java:25) 
    at org.myproject.mvc.converter.MyObjectToStringConverter.toEntityAttribute(MyObjectToStringConverter.java:12) 
    at org.neo4j.ogm.entityaccess.FieldWriter.write(FieldWriter.java:64) 
    at org.neo4j.ogm.mapper.GraphEntityMapper.writeProperty(GraphEntityMapper.java:162) 
    at org.neo4j.ogm.mapper.GraphEntityMapper.setProperties(GraphEntityMapper.java:127) 
    at org.neo4j.ogm.mapper.GraphEntityMapper.mapNodes(GraphEntityMapper.java:108) 
    at org.neo4j.ogm.mapper.GraphEntityMapper.mapEntities(GraphEntityMapper.java:92) 
    at org.neo4j.ogm.mapper.GraphEntityMapper.map(GraphEntityMapper.java:67) 
    at org.neo4j.ogm.session.response.SessionResponseHandler.loadById(SessionResponseHandler.java:161) 
    at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:45) 
    at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:36) 
    at org.neo4j.ogm.session.Neo4jSession.load(Neo4jSession.java:99) 
    at org.springframework.data.neo4j.repository.GraphRepositoryImpl.findOne(GraphRepositoryImpl.java:60) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:483) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:468) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:440) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 
    at com.sun.proxy.$Proxy87.findOne(Unknown Source) 
    at org.myproject.mvc.service.AbstractService.find(AbstractService.java:40)
@NodeEntity
类实体{
@转换(MyObjectToStringConverter.class)
私有MyObject MyObject;
...
}
@组成部分
类MyObjectToStringConverter实现AttributeConverter{
@自动连线
私家蚕豆;
@凌驾
公共字符串toGraphProperty(MyObject值){
返回值.getName();
}
@凌驾
公共MyObject toEntityAttribute(字符串值){
返回myBean.convert(值);//myBean为空
}
}
...
repository.find(myEntityID)//MyObjectToStringConverter中的NPE
java.lang.NullPointerException:null
位于org.myproject.mvc.converter.MyObjectToStringConverter.toEntityAttribute(MyObjectToStringConverter.java:25)
位于org.myproject.mvc.converter.MyObjectToStringConverter.toEntityAttribute(MyObjectToStringConverter.java:12)
位于org.neo4j.ogm.entityaccess.FieldWriter.write(FieldWriter.java:64)
位于org.neo4j.ogm.mapper.GraphEntityMapper.writeProperty(GraphEntityMapper.java:162)
位于org.neo4j.ogm.mapper.GraphEntityMapper.setProperties(GraphEntityMapper.java:127)
位于org.neo4j.ogm.mapper.GraphEntityMapper.mapNodes(GraphEntityMapper.java:108)
在org.neo4j.ogm.mapper.GraphEntityMapper.mapEntities上(GraphEntityMapper.java:92)
位于org.neo4j.ogm.mapper.GraphEntityMapper.map(GraphEntityMapper.java:67)
位于org.neo4j.ogm.session.response.SessionResponseHandler.loadById(SessionResponseHandler.java:161)
在org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:45)上
在org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:36)上
位于org.neo4j.ogm.session.Neo4jSession.load(Neo4jSession.java:99)
位于org.springframework.data.neo4j.repository.graphrespositoryimpl.findOne(graphrespositoryimpl.java:60)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:483)
位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:468)
位于org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:440)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:281)
位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
位于com.sun.proxy.$Proxy87.findOne(未知来源)
位于org.myproject.mvc.service.AbstractService.find(AbstractService.java:40)

OGM不会从Spring上下文获取转换器-它对Spring没有任何依赖关系。也许您可以使用Springs转换服务


我跟踪了文档,但找不到我的转换器。我的映射:@Convert(graphPropertyType=String.class)MyObject MyObject;我为String MyObject使用弹簧转换器创建了2个转换器。它们也被注释为@Component。在我的@Configuration类中,我在文档中添加了@Bean ConversionService ConversionService()。从getConverter返回=不匹配。Exp:org.springframework.core.convert.ConverterNotFoundException:未找到能够从java.lang.String类型转换为org.myprojectcore.MyObject类型的转换器–Jonathan D'Orleans 36分钟前将只使用转换服务提供的转换器,但您必须向转换服务注册转换器,如but I认为这违背了自动连线bean的目的。有没有办法以其他方式向转换服务注册转换器,以便注入bean?不熟悉这个