当前位置: 首页 > 知识库问答 >
问题:

如何解决sping-data-neo4j和Grails 3.3.6之间的spingbean冲突

慕志泽
2023-03-14

我有一个Grails 3.3.6应用程序。我想在这个应用程序中合并来自不同Spring启动应用程序的一些neo4j功能。所以我从Spring启动应用程序中添加了以下deps-

compile "org.neo4j:neo4j:3.1.0"
compile "org.neo4j.driver:neo4j-java-driver:1.1.0"
compile "org.neo4j:neo4j-ogm-core:2.1.6"
compile "org.neo4j:neo4j-ogm-http-driver:2.1.6"
runtime "org.neo4j:neo4j-ogm-embedded-driver:2.1.6"
runtime "org.neo4j:neo4j-ogm-bolt-driver:2.1.6"
compile "org.springframework.boot:spring-boot-starter-data-neo4j"
compile 'org.springframework.data:spring-data-neo4j:4.2.0.RELEASE'

并将源文件放在我的Grails应用程序的src文件夹中。spring boot应用程序正在使用一个配置类来创建bean,如下所示-

Configuration
@EnableNeo4jRepositories("com.server.repositories")
public class TestConfiguration {

@Value("${spring.data.neo4j.uri}")
String neo4jURL;

@Value("${spring.data.neo4j.username}")
String neo4jUser;

@Value("${spring.data.neo4j.password}")
String neo4jPass;

@Bean
public org.neo4j.ogm.config.Configuration configuration() {
    return new org.neo4j.ogm.config.Configuration.Builder().credentials(neo4jUser, neo4jPass).uri(neo4jURL).build();
}

@Bean
public SessionFactory neo4jSessionFactory() {
    // with domain entity base package(s)
    return new SessionFactory(configuration(), "com.server.model");
}

@Bean
public Neo4jTransactionManager neo4jTransactionManager() {
    return new Neo4jTransactionManager(neo4jSessionFactory());
}


@Bean
public Session neo4jSession() {
    return neo4jTransactionManager().getSessionFactory().openSession();
}

当我运行grails应用程序时,我得到了Spring bean冲突异常。看起来Grails和neo4j正在尝试创建一些同名的bean-

Unsatisfied dependency expressed through field 'neo4jSession'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.data.neo4j.transaction.SharedSessionCreator#0': Unsatisfied dependency expressed through method 'createSharedSession' parameter 0: Could not convert argument value of type [org.hibernate.internal.SessionFactoryImpl] to required type [org.neo4j.ogm.session.SessionFactory]: Failed to convert value of type 'org.hibernate.internal.SessionFactoryImpl' to required type 'org.neo4j.ogm.session.SessionFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.hibernate.internal.SessionFactoryImpl' to required type 'org.neo4j.ogm.session.SessionFactory': no matching editors or conversion strategy found

我应该如何解决这些bean冲突?

共有1个答案

郗福
2023-03-14

您必须指定Neo4j会话工厂的bean名称。在您的情况下,这应该按照您的预期工作:

@EnableNeo4jRepositories(setsionFactoryRef="neo4jSessionFactory", base Packages="com.server.repositories")

背景信息:Spring数据Neo4j将查找名为sessionFactory的bean。正如您在异常中所看到的,Hibernate也创建了一个具有这样一个名称的bean,它们之间发生了冲突。

 类似资料:
  • 我目前正在使用嵌入式neo4j运行我的webapp。现在我想换成独立的neo4j服务器。在考虑使用独立服务器时,我偶然发现了spring-data-neo4j。在使用SpringDataJPA并记住连接到db是多么容易之后,我开始寻找如何使用spring-data-neo4j的好教程。 这似乎可能与Spring-数据-neo4j-Rest。这就留下了一个问题,如何用java config配置它,而

  • 如果我评论其中一个,我会在游戏开始时收到运行时错误。我真的能做什么? 谢谢

  • 我创建了一个maven项目,并添加了我需要的所有依赖项。我有一些使用spall-data-jpa的存储库,我添加了一些集成测试。 现在,如果我知道它是基于springmvc的,我需要添加spring data rest的ontop。但是我发现的所有例子,我需要添加spring boot来启动应用程序。我还注意到所有新的spring项目都使用spring boot。这意味着我必须学习并在我的项目中使

  • 我正在从事一个基于Eclipse的项目,该项目最近从Java1.8切换到Java11。因此,我们现在在来自JRE的类和来自Eclipse插件依赖项的类之间存在冲突。 所以java.xml.*类现在出现了两次。一次来自模块java.xml,一次来自我们插件对org.eclipse.wst.xml.core的依赖 我想做的是排除java模块。xml或bundle javax。xml不会包含在生成中。我

  • 本文向大家介绍模板视图和AngularJS之间冲突的解决方法,包括了模板视图和AngularJS之间冲突的解决方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了模板视图和AngularJS之间冲突的解决方法。分享给大家供大家参考,具体如下: 问题: 在php的mvc视图中,我们需要在加载的过程中 传递一些数据给模板: 如: 这里是某个 controller 这里是对应的视图 那么现在问题

  • 对于具有任何属性(已索引或未索引)的NodeEntity,由于某些用例,我希望将数据类型从Integer更改为String 我只是更改了定义的NodeEntity类中的数据类型。新数据成功插入数据库,属性的数据类型为新设置的数据类型(即String)。但是,在此更改之前,数据库中已存在的节点的属性数据类型仍保持为旧数据类型(即整数) 有没有办法修改数据库中所有节点的数据类型?