gpt4 book ai didi

java - 对于 java 开发者来说,有什么比 Hibernate 更好的呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:33 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

8年前关闭。




Improve this question




我不确定是否有更好的方法来用 Java 开发数据库支持的应用程序,但我想我会问。

Hibernate 有很多我喜欢的地方,但也有很多问题。当你有和我一样多的经验时,它们中的大多数都不是什么大问题,但我认为我遇到的最大问题是一种适合所有延迟加载模型的问题。绝对讨厌它 - 那里必须有更好的东西......不是吗?

我讨厌延迟加载模型的原因是,虽然在配置文件中指定什么是延迟和不延迟很方便,但应用程序的许多部分更喜欢在一个区域延迟加载而在另一个区域不延迟加载。如果您想同时满足程序的两个部分,则需要忍受延迟加载并手动加载实体及其子项……以及它们的子项……等等。这只是膨胀,对解决真正的编程问题没有任何作用——比如完成项目的功能。

似乎您要使用的加载策略应该独立于映射信息,但是除了在 java 代码中编写加载之外,这在 hibernate 中是不可能的(据我所知)。

我对延迟加载的另一个问题是,当您遇到问题时不容易预测。在将应用程序部署到 Tomcat 之前,我通常不会发现lazyloadexceptions。

当这些异常发生在框架中时,感觉更加臃肿——比如 jackson 调用尚未加载的集合。或者,也许 Spring 正在访问我从未要求它访问的属性,因此无论如何它都会抛出 LazyInitializationException - 除了它们的框架触及我所有的 bean 属性之外别无他法。

不管怎样,因为我在集成测试的时候没能发现这些问题...当我在Tomcat中发现它们时,我经常要关闭tomcat,进行更改,重新编译,重新加载tomcat,重新登录我的应用程序,返回页面我正在查看它是否已修复 - 这确实是一个巨大的痛苦。修复这些错误之一需要很长时间。我觉得这只是妨碍了我实际在做的事情。

最后,我只是觉得像这样的细节真的让我感到压力。当我回顾我的一天并问:“我今天生产了什么?” - 我发现这样的问题真的让我觉得我完成了一些事情。

当然,我可以关闭延迟加载……但是我得到了绝对可怕的性能。

有没有更好的办法? “只是做正确的事情”,表现良好且更容易推理的东西?

谢谢

最佳答案

首先,这与 Hibernate 无关。几乎所有 ORM(当然是任何 JPA 提供程序)都以类似的方式实现延迟加载。

至于“更喜欢在一个区域进行延迟加载而在另一个区域不进行延迟加载”,您可以通过 HQL fetch join 覆盖延迟获取。如果您使用查询。直线上升 session.get()通常不需要这样做(注意 - 见下文),你可以让延迟加载为你发挥它的魔力。为此,您需要确保 session 保持 Activity 状态,直到对实体(其属性/集合/等)的所有请求完成,这通常通过 Open Session in View pattern 实现。 .
Spring 有一个corresponding interceptor以及。

注意:您必须加载所有实体的依赖项的一种情况是,当您要将其发送到远程系统时(从而使原始 session 不可用)。不过,这通常由 marshaller 处理。

关于java - 对于 java 开发者来说,有什么比 Hibernate 更好的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com