gpt4 book ai didi

hibernate - Spring Data - 不同包中的 hibernate.cfg.xml

转载 作者:行者123 更新时间:2023-12-02 13:30:47 26 4
gpt4 key购买 nike

我是 Spring 新手,正在尝试使用 Spring 数据创建六边形架构

我有一个 gradle 多模块设置,其中一个用于域的包,一个用于持久性,另一个用于配置,DddApplication 所在的位置。

启动时,我得到 Not a managed type: class com.example.ddd.domain.model.Customer ,除非我用 javax.persistence.@Entity 等注释类。

但是我不想在类里面添加注释。我在 persistence 中的 hibernate.cfg.xml 和 Customer.hbm.xml 中设置了实体包裹。

我认为 spring boot 没有使用其他包中的 hibernate.cfg.xml 。

有什么方法可以配置 Spring Boot 以根据 persistence 中的 hibernate.cfg.xml 识别实体包裹?

package com.example.ddd.configuration

// ...

@SpringBootApplication
@EntityScan("com.example.ddd.domain.model")
@EnableJpaRepositories("com.example.ddd.persistence.repository")
class DddApplication {
private val log: Logger = LoggerFactory.getLogger(DddApplication::class.java)

@Bean
fun loadData(repository: CustomerRepositoryJpa): CommandLineRunner? {
return CommandLineRunner { args: Array<String?>? ->
//...
}
}
}

fun main(args: Array<String>) {
runApplication<DddApplication>(*args)
}
package com.example.ddd.persistence.repository

//...

@Repository
interface CustomerRepositoryJpa : JpaRepository<Customer?, Long?> {}
package com.example.ddd.domain.model

open class Customer private constructor() {
val id: Long? = null
lateinit var firstName: String
lateinit var lastName: String
override fun toString(): String {
return String.format("Customer[id=%d, firstName='%s', lastName='%s']", id,
firstName, lastName)
}

companion object {
fun new(firstName: String, lastName: String) : Customer {
val e = Customer()
e.firstName = firstName
e.lastName = lastName
return e
}
}
}

application.properties 和 hibernate.cfg.xml 在 persistence 的资源中包裹。

最佳答案

你可以看看这个答案和附加的代码片段here .
这个想法是让 spring-data 使用 orm.xml 配置文件,您可以在其中定义域对象 JPA 特性。

一些备注

这里唯一困扰您的是 JPA 注释。
这些注释是 声明性 表示您的域对象(实体、值类型)也可以被视为 JPA 实体的方式。

您可能遵守 DDD、六边形架构和 KISS让他们驻留在您的域中的原则。
事实上,它们不会对任何技术持久性框架(如 Hibernate)产生强烈依赖。因为它们是注释,也因为只有 jpa spec library此处需要,作为您域的依赖项。
这样的域存储库以后可以用 Hibernate(NoSQL、AWS S3 等)以外的东西来实现,将这些注释保留在您的域中。

这是代码简单性和六边形原则应用之间的权衡,因为与注释相比,XML orm 文件看起来更难维护。
但是,此类文件将避免 JPA 注释污染您的域或在六边形之外添加额外的 JPA 实体层。

关于hibernate - Spring Data - 不同包中的 hibernate.cfg.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61537413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com