如何使用 Spring Data Neo4j 3.4.0 配置 Neo4j 存储库?
How to configure the Neo4j repository with Spring Data Neo4j 3.4.0?
我尝试在 search.maven.org 上将 spring data neo4j 从 3.3.2 升级到 3.4.0 版本,但现在构建出现以下异常:
AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.neo4j.config.EnableNeo4jRepositories.repositoryBaseClass()
该应用程序在 3.3.2 中运行良好。
配置如下class:
@Configuration
@EnableNeo4jRepositories(basePackages = { "it.data.neo4j.repository" })
@EnableTransactionManagement
@ComponentScan(basePackages = { "it.data.neo4j.service" })
public class Neo4JRepositoryConfiguration extends Neo4jConfiguration {
private static Logger logger = LoggerFactory.getLogger(Neo4JRepositoryConfiguration.class);
public static final String URL = "http://localhost:7474/db/data/";
public static final String LOGIN = "neo4j";
public static final String PASSWORD = "xxxx";
Neo4JRepositoryConfiguration() {
setBasePackage("it.data.neo4j.domain");
}
@Bean
GraphDatabaseService graphDatabaseService() {
return new SpringCypherRestGraphDatabase(URL, LOGIN, PASSWORD);
}
@Autowired
LocalContainerEntityManagerFactoryBean entityManagerFactory;
@Override
public PlatformTransactionManager neo4jTransactionManager(
GraphDatabaseService graphDatabaseService) {
return new ChainedTransactionManager(
new JpaTransactionManager(entityManagerFactory.getObject()),
new JtaTransactionManagerFactoryBean(graphDatabaseService).getObject());
}
}
依赖项是:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>3.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j-rest</artifactId>
<version>3.4.0.RELEASE</version>
</dependency>
您的包 it.data.neo4j.repository
是否同时包含 JPA 和 Neo4j 存储库?如果是这样,您可能需要将它们分成单独的包。
此外,SpringData Neo4j version 4较之前的版本有了较大的转变,涉及到一些代码迁移,可能您的实际应用代码需要调整以兼容SDN4:
http://docs.spring.io/spring-data/neo4j/docs/4.0.0.RELEASE/reference/html/#migration
很可能 class 路径依赖与 spring-data-commons.jar
冲突
确保 class 路径上的所有 jar 都使用相同版本的 spring-data-commons。
在我的例子中,我有 2 个 jar 引用了 spring-data-commons.jar 1.10 和 1.11,这导致了这个问题。
我尝试在 search.maven.org 上将 spring data neo4j 从 3.3.2 升级到 3.4.0 版本,但现在构建出现以下异常:
AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.neo4j.config.EnableNeo4jRepositories.repositoryBaseClass()
该应用程序在 3.3.2 中运行良好。
配置如下class:
@Configuration
@EnableNeo4jRepositories(basePackages = { "it.data.neo4j.repository" })
@EnableTransactionManagement
@ComponentScan(basePackages = { "it.data.neo4j.service" })
public class Neo4JRepositoryConfiguration extends Neo4jConfiguration {
private static Logger logger = LoggerFactory.getLogger(Neo4JRepositoryConfiguration.class);
public static final String URL = "http://localhost:7474/db/data/";
public static final String LOGIN = "neo4j";
public static final String PASSWORD = "xxxx";
Neo4JRepositoryConfiguration() {
setBasePackage("it.data.neo4j.domain");
}
@Bean
GraphDatabaseService graphDatabaseService() {
return new SpringCypherRestGraphDatabase(URL, LOGIN, PASSWORD);
}
@Autowired
LocalContainerEntityManagerFactoryBean entityManagerFactory;
@Override
public PlatformTransactionManager neo4jTransactionManager(
GraphDatabaseService graphDatabaseService) {
return new ChainedTransactionManager(
new JpaTransactionManager(entityManagerFactory.getObject()),
new JtaTransactionManagerFactoryBean(graphDatabaseService).getObject());
}
}
依赖项是:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>3.4.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j-rest</artifactId>
<version>3.4.0.RELEASE</version>
</dependency>
您的包 it.data.neo4j.repository
是否同时包含 JPA 和 Neo4j 存储库?如果是这样,您可能需要将它们分成单独的包。
此外,SpringData Neo4j version 4较之前的版本有了较大的转变,涉及到一些代码迁移,可能您的实际应用代码需要调整以兼容SDN4:
http://docs.spring.io/spring-data/neo4j/docs/4.0.0.RELEASE/reference/html/#migration
很可能 class 路径依赖与 spring-data-commons.jar
冲突确保 class 路径上的所有 jar 都使用相同版本的 spring-data-commons。
在我的例子中,我有 2 个 jar 引用了 spring-data-commons.jar 1.10 和 1.11,这导致了这个问题。