【问题标题】:Micronaut Data - No bean of type [org.hibernate.SessionFactory]Micronaut 数据 - 没有 [org.hibernate.SessionFactory] ​​类型的 bean
【发布时间】:2020-06-05 13:54:54
【问题描述】:

首先要提到的是 - 我已经启动并运行了一切。我所做的唯一更改是在代码中添加了更多存储库。

然后我得到:

15:47:58.126 [pool-2-thread-4] 错误 i.m.h.s.netty.RoutingInBoundHandler - 发生意外错误: 未能为类的参数 [sessionFactory] ​​注入值: io.micronaut.transaction.hibernate5.HibernateTransactionManager

消息:不存在 [org.hibernate.SessionFactory] ​​类型的 bean 给定限定符:@Named('default')。确保 bean 未被禁用 按 bean 要求(启用跟踪日志记录 'io.micronaut.context.condition' 来检查)以及 bean 是否已启用 然后确保该类被声明为 bean 并且注释处理是 启用(对于 Java 和 Kotlin,'micronaut-inject-java' 依赖项 应配置为注释处理器)。采取的路径:新 HibernateTransactionManager([SessionFactory sessionFactory],DataSource dataSource,Interceptor entityInterceptor) io.micronaut.context.exceptions.DependencyInjectionException:失败 为类的参数 [sessionFactory] ​​注入值: io.micronaut.transaction.hibernate5.HibernateTransactionManager

我查了很多关于这个的文章,但都提到了依赖。但我没有改变我的依赖。于是我开始调查。但到现在都没有成功。

我仔细检查了我的 gradle.build

kapt 'io.micronaut.data:micronaut-data-processor:1.0.2'
implementation 'io.micronaut.data:micronaut-data-hibernate-jpa:1.0.2'
implementation 'io.micronaut.configuration:micronaut-jdbc-hikari'
runtime 'org.postgresql:postgresql:42.2.12'
testImplementation 'com.h2database:h2:1.4.200'

我还确保我使用了正确的版本,但单元测试不会运行。

将 Gradle 6.4.1 与 micronaut 1.3.5 一起使用,显然数据 1.0.2 与 jpa 一起使用。 有什么想法吗?

还激活了条件跟踪,但没有关于 sessionfactory。 只是一些弹簧的东西,但我不使用弹簧,所以我认为还可以。

15:47:39.037 [Test worker] DEBUG i.m.context.condition.Condition - Bean [io.micronaut.jdbc.spring.$DataSourceTransactionManagerFactory$TransactionAwareDataSourceListener1Definition] will not be loaded due to failing conditions:
15:47:39.038 [Test worker] DEBUG i.m.context.condition.Condition - * Class [org.springframework.jdbc.datasource.DataSourceTransactionManager] is not present

任何想法..因为这让我有点疯狂:D

奥利弗

【问题讨论】:

  • 你能提供一些代码吗?不看项目很难说什么
  • 你希望我提供大约 5k LoC 吗?
  • 我认为依赖项有问题..因为它起作用了,我只是添加了一些更多的存储库..错误对我来说意味着默认的会话工厂不存在..所以我想知道如何调查,没有任何错误消息

标签: hibernate micronaut micronaut-data


【解决方案1】:

我终于发现了错误:-)

data class DataX(
        @Id
        val id: String
) {

val yrefs
    get() = _yrefs.toList()

@OneToMany(cascade = [CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH], orphanRemoval = true, fetch = FetchType.EAGER,
           mappedBy = "yref") // < this was wrong must be xref
private val _yrefs= mutableListOf<DataY>()
}


data class DataY(
        @Id
        val id: String
) {
val zrefs
    get() = _zrefs.toList()

@OneToMany(cascade = [CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH], orphanRemoval = true, fetch = FetchType.EAGER,
           mappedBy = "zref")
private val _zrefs = mutableListOf<DataZ>()

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "x_ref_id")
var xref: DataX? = null
}

【讨论】:

  • 出了什么错误?
  • @PatrickFavre 查看答案中的评论 ;-) 提示:错误的 mappedBy
【解决方案2】:

我是 Kotlin 和 Micronaut 的新手,所以我不确定。但是您的数据类以小写字母开头?

例如:

@Entity
data class dataBook (
        @Id
        @GeneratedValue
        val id: Long
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多