Java 将spring-data-neo4j 3.2.3升级到3.3.1数据转换失败
我编写了一个Spring引导应用程序(V1.2.5),它使用Spring数据(V3.2.3)访问Neo4j数据库(V2.2.1) 我曾尝试升级到Spring数据(V3.3.2),但是当我这样做时,我在neo4jConversionService中注册的数据转换就不再有效了。应用程序将编译,但任何需要这些转换的调用都会失败 略为缩写的stacktrace如下所示:Java 将spring-data-neo4j 3.2.3升级到3.3.1数据转换失败,java,spring,neo4j,spring-data,spring-data-neo4j,Java,Spring,Neo4j,Spring Data,Spring Data Neo4j,我编写了一个Spring引导应用程序(V1.2.5),它使用Spring数据(V3.2.3)访问Neo4j数据库(V2.2.1) 我曾尝试升级到Spring数据(V3.3.2),但是当我这样做时,我在neo4jConversionService中注册的数据转换就不再有效了。应用程序将编译,但任何需要这些转换的调用都会失败 略为缩写的stacktrace如下所示: 15:45:05.341 [http-nio-8080-exec-3] ERROR o.a.c.c.C.[.[.[.[dispatch
15:45:05.341 [http-nio-8080-exec-3] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing
failed; nested exception is org.springframework.data.neo4j.mapping.PersistentEntityConversionException: Requested a entity of type 'class com.eulersbridge.iEngage.database.domain.Owner', but
the entity is of type 'class com.eulersbridge.iEngage.database.domain.NewsArticle'.] with root cause
org.springframework.data.neo4j.mapping.PersistentEntityConversionException: Requested a entity of type 'class com.eulersbridge.iEngage.database.domain.Owner', but the entity is of type 'clas
s com.eulersbridge.iEngage.database.domain.NewsArticle'.
at org.springframework.data.neo4j.support.mapping.Neo4jEntityConverterImpl.read(Neo4jEntityConverterImpl.java:94) ~[spring-data-neo4j-3.3.2.RELEASE.jar:na]
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister$CachedConverter.read(Neo4jEntityPersister.java:170) ~[spring-data-neo4j-3.3.2.RELEASE.jar:na]
at org.springframework.data.neo4j.support.mapping.Neo4jEntityPersister.createEntityFromState(Neo4jEntityPersister.java:189) ~[spring-data-neo4j-3.3.2.RELEASE.jar:na]
at org.springframework.data.neo4j.support.Neo4jTemplate.createEntityFromState(Neo4jTemplate.java:224) ~[spring-data-neo4j-3.3.2.RELEASE.jar:na]
at org.springframework.data.neo4j.repository.AbstractGraphRepository.createEntity(AbstractGraphRepository.java:62) ~[spring-data-neo4j-3.3.2.RELEASE.jar:na]
at org.springframework.data.neo4j.repository.AbstractGraphRepository.findOne(AbstractGraphRepository.java:132) ~[spring-data-neo4j-3.3.2.RELEASE.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_05]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_05]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_05]
at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_05]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:414) ~[spring-data-commons-1
.10.0.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:399) ~[spring-data-commons-1.10.0.R
ELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:371) ~[spring-data-commons-1.10.0.REL
EASE.jar:na]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.10.0.RELEASE.jar:na]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) ~[spring-tx-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) ~[spring-aop-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at com.sun.proxy.$Proxy119.findOne(Unknown Source) ~[na:na]
at com.eulersbridge.iEngage.core.services.LikesEventHandler.checkParams(LikesEventHandler.java:106) ~[classes/:na]
注册转换器的代码(在升级之前工作):
更完整的application.java格式:
@PropertySource("classpath:application.properties")
@Configuration
@ComponentScan
@EnableNeo4jRepositories("com.eulersbridge.iEngage.database.repository")
@EnableTransactionManagement(mode = AdviceMode.PROXY)
@EnableAutoConfiguration
@EnableAspectJAutoProxy
public class Application extends Neo4jConfiguration
{
@Resource
private PropertyResolver propResolver;
private static Logger LOG = LoggerFactory.getLogger(Application.class);
public static void main(String[] args)
{
if (LOG.isDebugEnabled()) LOG.debug("main()");
SpringApplication app=new SpringApplication(Application.class);
app.setShowBanner(false);
app.run(args);
}
Application()
{
setBasePackage("com.eulersbridge.iEngage.database.domain");
}
@Bean(destroyMethod = "shutdown")
public GraphDatabaseService graphDatabaseService() throws IOException
{
String url=propResolver.getRequiredProperty("neo4j.server.url");
if (LOG.isDebugEnabled()) LOG.debug("url = "+url);
return new SpringCypherRestGraphDatabase(url);
}
@Override
public MappingInfrastructureFactoryBean mappingInfrastructure() throws Exception {
MappingInfrastructureFactoryBean mapping = super.mappingInfrastructure();
mapping.afterPropertiesSet();
return mapping;
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer()
{
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public PermissionEvaluator permissionEvaluator()
{
UserPermissionEvaluator bean= new UserPermissionEvaluator();
return bean;
}
@Bean protected ConversionService neo4jConversionService() throws Exception
{
ConversionService conversionService = super.neo4jConversionService();
ConverterRegistry registry = (ConverterRegistry) conversionService;
registry.addConverter(new EventToOwnerConverter());
registry.addConverter(new NewsArticleToOwnerConverter());
registry.addConverter(new PhotoAlbumToOwnerConverter());
registry.addConverter(new UserToOwnerConverter());
registry.addConverter(new CandidateToOwnerConverter());
registry.addConverter(new TicketToOwnerConverter());
return conversionService;
}
@Primary
@Bean
public ObjectMapper objectMapper()
{
ObjectMapper om=new ObjectMapper();
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
return om;
}
}
Maven依赖项包括:
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<groupId>org.springframework.boot</groupId>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>net.sf.supercsv</groupId>
<artifactId>super-csv</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>net.sf.supercsv</groupId>
<artifactId>super-csv-dozer</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>3.3.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j-rest</artifactId>
<version>3.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.10.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>0.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
<version>2.2.1</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>1.0.59</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-jbehave</artifactId>
<version>1.0.23</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>
spring启动程序父级
1.2.5.1发布
org.springframework.boot
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
弹簧启动机tomcat
org.springframework.boot
弹簧启动机aop
org.springframework.boot
弹簧启动安全
org.springframework.boot
弹簧启动机tomcat
假如
org.springframework.boot
弹簧起动试验
测试
com.fasterxml.jackson.core
杰克逊数据绑定
net.sf.sv
超级csv
2.2.0
net.sf.sv
超级推土机
2.2.0
org.springframework.data
spring-data-neo4j
3.3.2.1发布
org.springframework
春季方面
org.springframework.data
spring-data-neo4j-rest
3.3.2.1发布
org.springframework.data
spring数据共享
1.10.0.1发布
org.hibernate
休眠验证器
org.springframework.hateoas
春风
org.springframework.plugin
spring插件核心
javax.mail
javax.mail-api
org.springframework.boot
弹簧启动速度
javax.mail
邮件
1.4.7
com.jayway.jsonpath
json路径
测试
com.jayway.jsonpath
json路径断言
0.9.1
测试
org.neo4j
neo4j核
2.2.1
试验罐
测试
net.serenity-bdd
宁静核心
1.0.59
测试
net.serenity-bdd
宁静jbehave酒店
1.0.23
测试
通用验证器
通用验证器
1.4.1
有人能告诉我SpringDatav3.2和v3.3之间发生了什么变化,这会导致转换服务不再工作吗
干杯
格雷格他们怎么会失败?您能否提供未按预期执行的堆栈跟踪或代码?我认为SDN中的转换服务没有什么真正的变化。可能是spring-data-commons中有变化。注册似乎没有发生,因此如果没有注册转换器,代码将以您预期的方式失败。是否有办法查看转换器是否已向neo4jConversionService()注册?上面添加了堆栈跟踪。您能否创建一个简单的测试用例并提出Spring JIRA问题?多谢了他们怎么会失败?您能否提供未按预期执行的堆栈跟踪或代码?我认为SDN中的转换服务没有什么真正的变化。可能是spring-data-commons中有变化。注册似乎没有发生,因此如果没有注册转换器,代码将以您预期的方式失败。是否有办法查看转换器是否已向neo4jConversionService()注册?上面添加了堆栈跟踪。您能否创建一个简单的测试用例并提出Spring JIRA问题?谢谢
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<groupId>org.springframework.boot</groupId>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>net.sf.supercsv</groupId>
<artifactId>super-csv</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>net.sf.supercsv</groupId>
<artifactId>super-csv-dozer</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>3.3.2.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j-rest</artifactId>
<version>3.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.10.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-velocity</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path-assert</artifactId>
<version>0.9.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-kernel</artifactId>
<version>2.2.1</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-core</artifactId>
<version>1.0.59</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.serenity-bdd</groupId>
<artifactId>serenity-jbehave</artifactId>
<version>1.0.23</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.1</version>
</dependency>
</dependencies>