Hibernate GenericDAO 用于父/子关系和 DAO/DTO 模式

Posted

技术标签:

【中文标题】Hibernate GenericDAO 用于父/子关系和 DAO/DTO 模式【英文标题】:Hibernate GenericDAO for parent/child relationships and DAO/DTO patterns 【发布时间】:2011-02-05 02:15:12 【问题描述】:

我正在寻找 Hibernate 中的通用 DAO 实现,其中包括父/子关系管理(添加、删除、获取子级、设置父级等)。

实际上,网络上最常用的通用 DAO 是我在 jboss.org 上找到的那个。

另外,我正在寻找一些 DAO/DTO 示例实现和设计模式。

你知道那里有一些好的资源吗?

【问题讨论】:

为什么不直接使用hibernate? 我愿意,我正在寻找这些主题的 Hibernate 资源 【参考方案1】:

我正在寻找 Hibernate 中的通用 DAO 实现,其中包括父/子关系管理(添加、删除、获取子级、设置父级等)。

我会将父/子链接管理保留在实体级别(并非所有实体都有父/子),但我会在它们上创建链接管理方法以在使用双向链接时设置双方,如@987654321 中所述@。

实际上,网络上最常用的通用 DAO 是我在 jboss.org 上找到的。

有几个项目包含 Google 代码示例。我建议检查:

generic-dao - JPA 数据访问对象工具包 daofusion - 使用 JPA / Hibernate 的基于 Java 的 DAO 模式实现。 hibernate-generic-dao - 通用 DAO 实现:可扩展、详细搜索、远程​​服务接口

【讨论】:

在实体级别添加父/子管理意味着将自定义类代码添加到实体映射中(我使用的是xml映射),所以您不认为这会增加复杂性和可维护性映射? @Marco 在任何情况下,您都需要在 XML 映射中声明这些关联(添加处理链接两侧的方法非常方便,它不会更改映射的任何内容) .【参考方案2】:

父/子关系是一种特殊的一对多关系,它们不需要特殊的 DAO 进行交互。您只需编写如下代码:

Parent p = new Parent();
Child c1 = new Child();
Child c2 = new Child();
// populate c1 and c2
p.addChild(c1);
p.addChild(c2);
childDao.save(c1);
childDao.save(c2);
parentDao.save(p);

Hibernate 文档中有一段实际上显示了一个示例父/子实现:Chapter 21. Example: Parent/Child

如果您更喜欢使用注解和/或 Hibernate/JPA,请查看:Taking JPA for a Test Drive

【讨论】:

以上是关于Hibernate GenericDAO 用于父/子关系和 DAO/DTO 模式的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 EhCache 使用 Spring 和扩展 Hibernate 的 JpaRepository 的自定义 GenericDao 接口

如何使用 QueryDSL 构建 GenericDao?

GenericDAO 与 Guice,玩泛型和 ParameterizedType

使用 group by / unique 进行 Genericdao 搜索

用于开发 GenericDao 的最佳 Spring API

Hibernate整合Spring异常'sessionFactory' or 'hibernateTemplate' is required