作者adrianshum (Alien)
看板java
标题Re: [问题] Hibernate 多年来的疑问
时间Sun Mar 31 00:29:21 2013
※ 引述《lookjohn (《经济状况》赤贫)》之铭言:
: 各位大大好,小弟,用Hibernate 进行开发已经有一段时间了,
: 不管大小专案的进行,hibernate 已经是我开发上不可或缺的开发元件之一
: 但是有个疑问一直存在小弟身上多年,想请各位大大帮忙厘清一下小弟的观念
[43]
: 这两只 皆指到 TableA (不管事用annotion或是ORM)..
: ===
: 想请教:
: 使用语法 : "From TableA where 1=1" ; query.setMaxResults(1000);
直接 "from BeanA" 或 "from BeanASimple" 就行了。
: 在同样10000笔的查询之中,我使用的BeanASimple 的情况 是否优於BeanA?
: 是否下列几个条件皆有比较好:
: 1.查询效率
: 2.记忆体的占用率
: 3.多人同时查询的情况
: 这是我个人的认知,就观念上不知是否是正确的或是有相对的谬论存在,
: 请各位大大不吝指教..:)
单是你上面的几项而言,如我在上一篇的 comment 所说,你可以
单纯把问题考虑为一般 SQL statement, select 的 field 的多少
对 performance 的影响。
一般而言,select 比较少的 field, 用的 memory 较少,传送的资料
也较少,所以 1,2,3 都应该是 BeanASimple 的情况较好,如果撇除因
资料量多少而引起的分别,则 1,3 应该都一样。
But!
简单而言是这样而已,实际有太多可能影响的东西。比如说,很多地方都
在用 select 多 field 的 SQL, 很有可能 DB 已经做了相关的 cache
(比如execution plan 的 cache),select 多 field 也可能变得反而较
快。
除此以外,更值得关注的是 BeanA & BeanASimple 的用处。究竟哪一个
才是实际的 model? 比如,建立 entity 的关系的时候,是用哪一个?这
可能影响到 Hibernate first level cache,也会对效率有影响。
更重要的是,对於设计而言的问题 (虽然有点离题),单纯因为大部
份时间只用到其中几个 field 而弄一个 entity 出来,看来并不是很
合理的做法。要知道 Hibernate (或其他 ORM framework) 是让你把
你的 model map 到 relational database, 意即,目标是让你能有合
理的 model design. 可是你的出发点却还是以 DB 出发,把 entity
当成单纯的 value object (所以才会出现“因为只要到几个 field
所以弄一个 Simple entity 出来”)。通常这样用 Hibernate 的少
有见到结果理想的,倒不如用 MyBatis 更适合。
Alien
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 223.19.42.175
1F:推 lookjohn:谢谢Alien 大哥,小弟受教了,之所以这麽问,是因为 03/31 11:34
2F:→ lookjohn:在大部份的function implement之中用不到那麽多Field 03/31 11:36