当前位置: 首页 > 面试题库 >

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

步兴为
2023-03-14
问题内容

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

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

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

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

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

你们对此有何想法?

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


问题答案:

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

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



 类似资料:
  • 问题内容: 我正在尝试制作一个按钮,以便用户单击它时,按住鼠标按钮时它会更改其样式。如果在移动浏览器中触摸它,我也希望它以类似的方式更改其样式。对我来说,看似显而易见的事情是使用CSS:active伪类,但这没有用。我尝试了:focus,但是也没有用。我尝试:hover,它似乎起作用了,但是当我将手指从按钮上移开后,它仍然保持了样式。所有这些观察都是在iPhone 4和Droid 2上进行的。 有

  • 问题内容: 场景 我正在用Java编写涉及汽车的程序。 注意:我已尽最大可能简化了此方案,以使其更加通用和易于理解。 我实际上不是在开车。 我创建了一个类,它是对象的集合。 该对象具有一个(double)和一个(int)。构造函数将年份作为参数,例如: 这是棘手的部分…汽车必须具有某种类型(比如说Corvette或Clunker)。克尔维特(克尔维特)的车子为and,Cl子(Clunker)的车子

  • 我想知道探索者是否有一个唯一的id或什么的,因为我正在做一个实验,我意识到谷歌检测它是同一台电脑,即使我有很多机会。我已经试过了 null 我真的很感谢你们的帮助,谢谢你们

  • 问题内容: 刚刚在玩CSS中的属性。 我想让所有鼠标事件都看不到,除了。 因此,所有单击命令都将转到其下一个,但div可以报告鼠标是否在其上方。 谁能告诉我是否可以做到? HTML: CSS: 问题答案: 我认为仅凭CSS不可能实现您的目标。但是,正如其他贡献者所提到的那样,在JQuery中做起来很容易。这是我的操作方法: 的HTML CSS(不变) jQuery查询

  • 有了这个jdk代码在, java编译器只有注释声明,它足够智能,可以检测错误(编译时): 在下面的问题代码中。 的注释声明刚刚编译为, 它只不过是一个。 所以 语法是否帮助java编译器在编译时检测上述错误?

  • 问题内容: 在C#中,您可以将一个类标记为,以便只能从同一包中对其进行访问。Java有什么类似的东西吗? 问题答案: 您可以通过从类的声明中省略安全修饰符(公共,私有)来创建程序包专用类。