我有几个关于hibernate的问题.
在stackoverflow中的许多问题中,有几个人说hibernate对于非常复杂的数据库来说并不是一个好选择.如果我们有非常复杂的数据库,那么hibernate不是正确的选择.它更适合绿色领域项目,但对复杂的遗留数据库来说并不是那么好.
这是真的?
hibernate也会生成查询.每个项目经理都希望有优化的查询(hibernate不能生成比sql专家更优化的查询!).因此对于大型项目来说,雇用sql专家不是问题.sql专家将优化查询(使用explain sql,使用join ...)
我的问题是如何一个庞大而昂贵的项目不关心sql优化?
(你会说你可以编写HQL,但正如我在很多帖子中看到的那样,解释说HQL并不比sql强大,而且很多程序员都会头疼并且需要几个小时的调整)(你喜欢你的所有器官)理想情况下你的身体不工作吗?)另外,二级缓存有助于休眠,因为hibernate知道生成大量的查询而不是复杂的连接.
我的问题是:真的是一个复杂的数据库,只能由一个系统修改(例如网站)吗?如果我们谈论企业系统,可以通过多个进程访问数据库,共享不同的编程语言和平台.
所以在这种情况下,二级缓存并没有多大帮助.
对于什么样的项目hibernate适合?它适用于没有人关心sql的后台项目吗?
当您的管理员说:请使用memcached进行缓存时,请使用此优化查询而不是您的?
如果您使用的是oracle数据库,那么orache拥有最先进的sql语法.他们花了很多时间和金钱在非常强大的语法上.如果不使用,该语法是什么?
该软件只编写一次(然后维护)并使用很长时间.如果我是一家订购软件的公司,我会说:我会使用该软件几年,我喜欢快速,如果你花1个月的时间用hibernate编写软件,我会再花一个月的时间来购买软件例如,IBATIS知道它可以更好地工作多年
(当你购买的汽车你感兴趣的汽车经济1千克油/公里,而不是制造商生产汽车的简单和简单!).因此,作为软件消费者,我对您的工作效率并不感兴趣,只是软件的速度有多快.当然价格也是相关的,但如果我们谈论价格,那么就有更复杂的数学.
当我们真的无法预测系统的某些部分时,我们可以称之为工程吗?
(如果他不能预测电流,电气工程师真的可以成为工程师)
请分享您的意见.
问候
1)(...)这是真的吗?
不,不是,Hibernate可以处理相当复杂的数据库,包括现有数据库.但是,它可能无法很好地处理严重非规范化的数据库或异国情调的架构.这是不同的.
2)(...)我的问题是如何一个巨大而昂贵的项目不关心sql优化?
这是无意义的,使用Hibernate并不意味着你不关心优化.我已经开发了一个庞大而复杂的STP系统(数亿美元的预算),性能绝对是一个重要的问题,我们实际上引入了Hibernate,从延迟加载,二级缓存(和加速开发)等方面受益.
这是使用像Hibernate这样的ORM时的交易(适用时):
使用ORM比使用ORM更快(或者使用它们没有任何意义).
绝大多数生成的查询都会正常运行(事实上,Hibernate 比普通开发人员生成更好的 SQL).
您可以(并且必须)在一定程度上调整查询和休眠.
即使您花了一些时间进行性能优化(包括回退到本机SQL以查找真正有问题的查询),您仍然可以更快地完成.
3)(...)所以在这种情况下,二级缓存没有多大帮助.
好吧,你说得对,使用二级缓存理想地意味着使用Hibernate API这一事实是正确的(尽管你仍然可以"手动"逐出缓存,尽管我倾向于将它用于"大多数读取"实体).但是,更重要的是,根据我通过数据库在许多应用程序之间共享数据的经验只会导致无法维护的应用程序(改变单个位变得不可能,因为它可能影响多个应用程序)并且应该避免.使用EAI/ESB并通过它公开主系统的服务.这样,您可以重用业务逻辑,二级缓存等.
4)(...)hibernate适合哪种项目?它适用于没有人关心sql的后台项目吗?
Hibernate确实非常适合CRUD应用程序,但不仅如此(见上文),你的问题显示出一些无知,正如我已经说过的那样.但是,它不适合任何项目:
我可能不会将它用于数据仓库或大型报表应用程序.
我可能不会将它用于严重非规范化或异国情调的遗留数据库(在这种情况下像mybatis这样的数据映射器可能是更好的选择).
我可能不会将它用于使用存储过程的现有系统.
我不会将它与非RDBMS数据存储区一起使用:)
5)(...)当您的管理员说:请使用memcached进行缓存时,请使用此优化查询而不是您的?
我告诉他memcached可能不是我们上下文中的最佳解决方案(不,我不想总是通过网络发送我的数据,我不关心Facebook/LiveJournal/Twitter /无论使用它,我们的应用程序可能有不同的需求),在使用Hibernate时还有其他更好的缓存实现,我请他与我讨论问题,我们讨论各种解决方案等.我们团队合作,而不是互相攻击.
总而言之,ORM解决方案并不总是合适,但我认为您目前有偏见,我的经验与您的问题中表达的观点(误解?)不同.
何时不在Java中使用O/R映射