关闭。这个问题是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/