我们有一个域,其中 90% 的类非常简单,可以在数据库中轻松地 1:1 映射。我很高兴 Hibernate 与 spring-data-jpa 相结合如何为这些类消除了大量的琐事。
然而,该域的其余部分具有挑战性,出于多种原因,我不想直接将其映射到数据库表。
我做了实验来引入由 Hibernate 管理的中间 bean,并将这些 bean 映射到我的域,当所有关系都从具有挑战性的部分到容易的部分时,这很有效。当我有由 Hibernate 管理的“简单”类引用在自定义 Java 代码中映射的“具有挑战性”类而不是直接由休眠管理时,这种方法会失败。
这时我意识到我无法自定义 Hibernate 并插入某种允许我即时进行此类转换的 ObjectFactory。
- 编辑 -
我的问题是什么:在使用 JPA 时,让实体中的数据库关注为零的 DDD 样式域层的最简单方法是什么?在 DDD 中,所有数据库问题都由通常与 DAO 协作的存储库处理。
实体中的零 DB 关注意味着域类中没有 JPA 注释或映射配置。一种方法是让 JPA(或其他持久性技术)管理映射到域实体的 TO。但是,如果我采用这条路线,则我必须拥有所有实体,即使是最简单的实体(想想地址)也必须通过映射层。
我想为琐碎的实体使用像 JPA 这样的“懒惰”的东西,并能够将它们与“手动”管理的其他实体混合使用。目前我不知道允许我从 JPA 托管实体链接到非 JPA 托管实体的聪明解决方案。我总是可以检索 JPA 实体,然后通过第二次调用检索非 JPA 实体,但如果可能的话,我想避免这种情况。