java - 关于使用 Hibernate 时的数据对象和 DAO 设计

标签 java hibernate

我在使用 Hibernate 的数据库项目的两种设计之间犹豫不决。

设计#1。

(1)创建通用数据提供者接口(interface),包括一组DAO接口(interface)和通用数据容器类。它隐藏了底层的实现。数据提供者实现可以访问数据库中的数据、XML 文件、服务或其他内容。数据提供者的用户不知道。

(2)用Hibernate创建数据库library。该库实现了 (1) 中的数据提供者接口(interface)。

设计#1 的缺点是,为了隐藏实现细节,我需要创建两组数据容器类。一个在通用数据提供者接口(interface)中——我们称它们为 DPI 对象,另一组用于数据库库,专门用于 Hibernate 中的实体/属性映射——我们称它们为 H 对象。在 DAO 实现中,我需要从数据库中读取数据以创建 H-Object(通过 Hibernate),然后将 H-Object 转换为 DPI-Object。

设计#2。

不要创建通用的数据提供者接口(interface)。将 H 对象直接暴露给使用数据库库的组件。所以数据库library的用户需要了解Hibernate。

我更喜欢设计#1,但我不想创建两组数据容器类。这是向使用基于数据库的数据提供程序的用户隐藏 H 对象和其他 Hibernate 实现细节的正确方法吗?

设计#2 有什么缺点吗?我不会在新的 future 实现其他数据提供者,所以我是否应该忘记数据提供者接口(interface)并使用设计 #2?

你怎么看这件事?感谢您的宝贵时间!

最佳答案

Hibernate Domain 对象是简单的 POJO,因此您不必创建单独的 DPI 对象,H-Object 本身可以直接使用。在 DAO 中,您可以控制它们是来自 hibernate 还是其他任何东西。

关于java - 关于使用 Hibernate 时的数据对象和 DAO 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2612057/

相关文章:

java - 如何用 Java (Android) 编写这个 Objective-C Hmac 签名函数?

java - 如何初始化通过远程方法调用获取的 Hibernate 实体?

Java JPA 负载平衡读取查询以读取 MySql DB 从站

{0} 的 Java 模式匹配

java - 为什么这个正则表达式会捕获排除的字符?

java - Intellij Idea 14 + HIbernate查询

java - hibernate:与未映射实体的关联

java - 如何查询/表示列表页中的一对多信息

java - 是否可以在现有 Eclipse RCP View 中添加新的小部件

java - 如何在 Java 中比较字符串?