精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-28
sorphi 写道 robbin 写道 对于Hibernate,有两点值得反思:
1、...但是我的经验表明,项目中要尽量避免复杂的对象映射,这样性能很糟糕,也很容易出错,实际上我仅仅只用n:1就可以表达很多种映射模型了... ... 复杂的对象映射,源自企图用一个优美的object graph,在各层来表达实体关系。让一个业务方法返回一个Domain Entity比返回一个map, array好看得多。 downpour 写道 我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。 比如这个,最省力的方法就是返回一个array 好了。虽然看上去不那么OO。 当然也可以在HQL中构造java对象 |
|
返回顶楼 | |
发表时间:2006-11-28
JavaInActoin 写道 还有一个严重问题:动态性。
字段的调整是比较常见的软件维护操作, 用上Hibernate后,这个功能就不太容易实现了。 字段的调节主要涉及三个地方:数据表、JAVA实体类、映射文件。 数据表的调整比较容易实现,而JAVA类、映射文件都不大容易在运行时动态更改,即使在运行时更改了、编译了,如果不重启,也不能正常工作。 现在能想到的办法只能是预留几个字段,以备不时之需。 那么你是不是认为直接用jdbc写sql就不用改代码了? |
|
返回顶楼 | |
发表时间:2006-11-28
庄表伟 写道 记得以前robbin还说过,Hibernate生成的SQL,非常的优化,效率极高,非JDBC顶级高手,勿须尝试写出比Hibernate更加好的SQL。
怎么现在就成了:“现在极其厌恶Hibernate生成的SQL,又臭又长,极难阅读。”? 这两个观点似乎不矛盾 |
|
返回顶楼 | |
发表时间:2006-11-28
cznc 写道 1,save(Foo f);不能通过f对象往里面传递哪些字段更新、哪些不更新;
严重同意,其实没必要将空数据写入数据库,一般很少将数据库中的数据更新为空,这是很不好的设计 cznc 写道 2,多主键问题无主键问题(不妨假设就是没有可以为以确定对象记录的情况,sql本来就是操作集合的); 没有主键就把所有的设为主键吧 |
|
返回顶楼 | |
发表时间:2006-11-28
zhaoyifei 写道 liuwangxia 写道 robbin 写道 2、现在极其厌恶Hibernate生成的SQL,又臭又长,极难阅读。 深有同感!
原因是要为表生成别名,还要为字段生成别名,而且当 SQL 只涉及到一张表的时候还要为表生成一个别名 this_,为每个字段生成别名 *_0_,浪费! 对了,那位热心人能将这个问题提交给 Hibernate 开发组试试看! 机器自动生成,而且还得考虑不能触犯到保留字(java sql 数据库自身),这样多的要求,还得易看!其实hibernate做得很好了,只是我们不知道他们所考虑的。 偶写过OQL的解析器,非常理解 |
|
返回顶楼 | |
发表时间:2006-11-28
smilelee74 写道 我觉得不爽的是如果HQL要想使用左右连接,必须先配一对多,多对多才能使用。如果不配,那就不能用。我的系统里都没配,所以碰到左右连接只能用native sql,但框架里又是设计成OO的,用native sql非常别扭。
其实呢,OQL中是不应该存在左右连接的概念的,不过HQL这点确实讨厌 |
|
返回顶楼 | |
发表时间:2006-11-28
wubg 写道 做报表时,用Hibernate生成一个复杂的SQL语句,真是煞费心思,左连右连痛苦,后面就只能直接用JDBC来实现,用hibernate实现对象add,update,delete是容易,但是,复杂的业务,就没法容易实现了
你不会用而已 |
|
返回顶楼 | |
发表时间:2006-11-29
asd 写道 一个软件,一个技术,最重要的是可持续性吧,这几年,不仅仅hibernate,其它的开源软件为可持续性做了多少努力?不知道,我觉得不会超过10%,可能更低。
做为一名java程序员,从职业生涯的角度来说,应该了解一些更为持久的,不是昙花一现的技术,从技术的角度来说,应该了解一些低层基础一点的东西。 ps: 来自国内某技术论坛的观点,对于一个企业级的应用系统系统来说,解决oracle8i,9i到oracle10g的需求很大,从sqlserver迁移到orcle的需求并不多。 除非:1,它不是企业级系统,2,dba那时候头脑发晕。 电信的项目,用什么数据库局方来定的,一个东西,在A省是Oracle到了B省就是Sybase,没有办法的事情,因为你是乙方。 |
|
返回顶楼 | |
发表时间:2006-12-01
Nicholas_Ding 写道 复杂的业务请写到存储过程中去,这是最高效的办法。
除非做一个公司的项目维护,产品开发是不可能这样的,现在的中间件代码就是以前的SP! |
|
返回顶楼 | |
发表时间:2006-12-07
呵呵,其实很多时候是我们没有真正学会用好hql
|
|
返回顶楼 | |