Hibernate注释和DTO

时间:2011-11-08 21:06:47

标签: hibernate design-patterns dao dto

我有一个关于使用Hibernate注释和DAO模式的设计问题。 DTO应该代表数据模型的实体。 DAO是定义这些DTO上的操作的接口。 DAO实现是实现DAO接口的类,并实现这些接口定义的操作(例如使用Hibernate / MySQL)。 我的问题是:在这种情况下如何使用Hibernate注释?如果我直接注释DTO,我将我的DTO与Hibernate框架结合起来,这是一个不好的做法。

也许这是一个简单的问题,但问题很有趣。

由于

4 个答案:

答案 0 :(得分:1)

这是一个问题,或者说是“独立”与易用性有关。您可以选择使用Hibernate或其他JPA引擎,并且确实需要在实体上添加注释并在类路径中使用hibernate jar来使用它们。或者您选择完全独立于JPA / Hibernate,但您必须自己实现整个持久性。

我的观点是,为了避免类路径中的某些罐子而牺牲JPA提供的易用性和生产率提升是一个糟糕的选择。但是YMMV。

答案 1 :(得分:1)

当您使用来自javax.persistence包的注释时, NOT 将您的代码与Hibernate耦合(但是当您使用org.hibernate注释时,因为它们依赖于第三方库)。

请注意,注释只是不影响您的设计的元信息(您不强制类实现类似于接口的方法),您只是为了某些目的使用附加信息对它们进行注释。

只要注释属于标准化的java api(在本例中为javax.persistence),注释类的客户端就不会被强制将其代码与其他依赖项耦合。

答案 2 :(得分:0)

如果我理解正确,DTO是Hibernate和数据库表之间的对象关系映射,如果是这种情况,我相信你最好注释你的DTO对象。

答案 3 :(得分:0)

来自维基百科:

  

在传统的EJB(Enterprise JavaBeans)体系结构中,DTO有两个目的:首先,它们解决了实体bean pre-ejb 3.0不可序列化的问题;第二,他们隐式定义了一个汇编阶段,在将控制权返回到表示层之前,将视图使用的所有数据都提取并编组到DTO中。[citation needed];使用DTO的第三个原因可能是应用程序的某些层应该无法访问底层数据访问对象,从而更改数据。

因此,DTO是从实体创建并由表示层使用的对象(例如,JSP应该访问DTO-s而不是直接访问实体)。因此,您应该注释不是DTO-s而是您的Entity类,然后提供将实体转换为DTO-s的代码。