一尘不染

我发现JPA或类似的东西不鼓励DAO模式

hibernate

我发现JPA或类似的东西不鼓励使用DAO模式。我不知道,但是我有这种感觉,尤其是在服务器管理的JTA管理器中。

在使用DAO模式进行了充分的动手之后,我开始围绕该模式设计基于JPA的应用程序。但这并不适合IMO。我倾向于失去JPA的全部功能。

好吧,假设您使用悲观锁定触发查询,并且该查询从DAO方法返回了实体列表。返回时,事务结束并且锁消失了(服务器管理的JTA管理器的情况)。因此,毫无意义的说。但是,有一些有效的情况。

另一个例子更为琐碎。假设您触发查询以获取某个实体,该实体具有与其他实体的一对多关联的延迟加载。返回DAO方法后,交易结束。懒加载不再起作用了,您只是得到了null什么。为了解决这个问题,我们急切地手动加载它。我们做类似的事情a.getBList().size()

因此,IMO最好不要专门制作DAO,而应在您的业务bean中进行,这样您就可以利用这些有用的功能。或者说,ORM API本身可以被视为DAO
/数据层。因此,我们不需要再做一个。

你们对此有何想法?

注意:无论如何,我不说DAO模式已经过时。 确实,这取决于具体情况。


阅读 217

收藏
2020-06-20

共1个答案

一尘不染

对于简单的应用程序,在EntityManager直接使用EJB中并跳过DAO模式时,我看不到任何问题(我厌倦了编写太多代码)。我的感觉确实是,这就是JPA和Java
EE API所鼓励的。但是对于更复杂的应用程序(从存储过程,平面文件访问数据…),它仍然是合理的。所以你是对的,这取决于:)

JPA是否杀死了DAO,您还会发现其他一些启发性的观点在InfoQ上,但是您不会对内容和结论感到惊讶,可以总结为:您不再需要用于标准数据访问的DAO模式,但是在某些更复杂的情况下可能需要它,但是我们活着没有它更好。

2020-06-20