我发现JPA或类似的技术并不支持DAO模式。我不知道为什么,但是我感觉特别是与服务器管理的JTA管理器一起使用时,这种情况更加明显。
在充分使用DAO模式后,我开始设计基于JPA的应用程序,但是我觉得它并不适合。在我看来,我倾向于失去JPA的许多功能。
假设您使用悲观锁定发出查询并从DAO方法返回实体列表。当事务结束且锁定消失(与由服务器管理的JTA管理器有关的一种情况)时,就没有必要了。虽然有有效的情况。
另一个例子更加琐碎。假设您发出查询以获取某个具有延迟加载一对多关联其他实体的实体。在DAO方法返回后,事务结束。惰性加载不再起作用,您只会得到null或其他内容。为了解决这个问题,我们手动进行急切加载。我们可以执行类似于
因此,在我的看法中最好不要专门制作DAO,而是在业务bean中进行操作,这样您就能够利用那些有用的功能。或者可以将ORM API视为DAO /数据层本身。因此,我们不需要再创建一个DAO。
你们认为呢?
注意:我并不是说DAO模式已经过时了。事实上,它取决于具体情况。
在充分使用DAO模式后,我开始设计基于JPA的应用程序,但是我觉得它并不适合。在我看来,我倾向于失去JPA的许多功能。
假设您使用悲观锁定发出查询并从DAO方法返回实体列表。当事务结束且锁定消失(与由服务器管理的JTA管理器有关的一种情况)时,就没有必要了。虽然有有效的情况。
另一个例子更加琐碎。假设您发出查询以获取某个具有延迟加载一对多关联其他实体的实体。在DAO方法返回后,事务结束。惰性加载不再起作用,您只会得到null或其他内容。为了解决这个问题,我们手动进行急切加载。我们可以执行类似于
a.getBList().size()
的操作。因此,在我的看法中最好不要专门制作DAO,而是在业务bean中进行操作,这样您就能够利用那些有用的功能。或者可以将ORM API视为DAO /数据层本身。因此,我们不需要再创建一个DAO。
你们认为呢?
注意:我并不是说DAO模式已经过时了。事实上,它取决于具体情况。