hibernate ,偷懒还是不偷懒?

标签 hibernate design-patterns lazy-evaluation

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












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

2年前关闭。




Improve this question




我有 entity A ,它与 entity B 具有多对多关系.

所以表格布局是:A, AB(mapping table), B
要获取实体 A 的对象:
我打电话A.getById()这是getHibernateTemplate().get(A.class, id)使用 Spring 和 hibernate 。

问题是,有时后续代码只需要 A,有时后续代码将继续访问关联的 B,所以我们想使用 延迟加载 在某些情况下和 渴望 在其他一些情况下。但问题是所有数据库访问都是通过同一个 ADao.java 提供的。 ,所以只有一种方法 getById() .

我应该创建两个版本的 getById() 方法吗?

但是对于更复杂的情况,如果 A 也通过多对多连接到 C,那么可能存在延迟加载-C 和急切加载-C 的变体,因此所需的 getById()变体迅速呈指数增长。

你对这个选择有什么看法?

谢谢

最佳答案

嗯,你正确地描述了这个问题。这只是简单性(只有一种方法)和性能(两种方法,每种方法都准确返回所需内容)之间的权衡。如果仅使用单一方法并延迟加载 Bs 的响应时间是正确的,则不要触摸任何东西。如果响应时间太长,并且您已经测量过急切加载会使其正确,那么引入一种新方法。

保持简单,仅在需要时进行优化。延迟加载关联速度很快,因为它只是对外键进行查询,而应该在数据库中对其进行索引。

也不是加载两个 toMany 关联非常罕见:在页面上显示一个类别的所有产品是很常见的,但显示一个类别所有产品的所有购买的情况并不常见。

关于 hibernate ,偷懒还是不偷懒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8493087/

相关文章:

java - 如何处理并发事务?

mysql - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column '____' in 'field list'

c# - 建立数据库连接的最佳方法是什么(静态、抽象、按请求……)?

haskell - 奇怪的 GHCi 惰性评估

Scala 无限迭代器 OutOfMemory

javascript - Trampoline、递归和惰性求值

java - Hibernate更新导致集合被删除并重新插入

hibernate - 基于用户角色和属性的标准

java - 如何正确设计Spring组件?

angular - Web 组件设计模式