1)(…)这是真的吗?
不,不是的,Hibernate可以处理相当复杂的数据库,包括现有的数据库。但是,对于高度非规范化的数据库或奇异的架构,它可能无法很好地处理。这是不同的。
2)(…)我的问题是,为什么一个庞大而昂贵的项目不关心sql优化?
这是胡说八道,使用Hibernate并不意味着您不在乎优化。我已经在一个庞大而复杂的STP系统上工作(几亿欧元的预算),性能绝对是一个重要的问题,我们实际上引入了Hibernate来受益于诸如延迟加载,二级缓存(并加快开发)之类的事情。
这是使用像Hibernate这样的ORM时的交易(适当时):
- 使用ORM会比不使用ORM更快地完成工作(否则将毫无意义地使用它们)。
- 绝大多数生成的查询将正确运行(事实是Hibernate生成的SQL比普通开发人员 更好 )。
- 您可以(必须)调优查询并在某种程度上hibernate。
- 即使您花了一些时间进行性能优化(包括对真正有问题的查询使用本机SQL),也仍然可以更快地完成。
3)(…)因此,在这种情况下,二级缓存没有太大帮助。
好吧,您对以下事实是正确的:理想情况下,使用二级缓存意味着使用Hibernate
API(尽管您仍然可以“手动”退出缓存,尽管我倾向于将其用于“大多数已读取”实体)。但是,更重要的是,根据我的经验,通过数据库在许多应用程序之间共享数据只会导致应用程序无法维护(更改单个位变得不可能,因为这可能会影响多个应用程序),因此应避免。使用EAI
/ ESB并通过它公开主系统的服务。这样,您可以重用业务逻辑,第二级缓存等。
4)(…)Hibernate适用于哪种项目?是否适用于没有人关心sql的后台项目?
Hibernate对于CRUD应用程序确实非常好,但不仅如此(参见上文),而且您的问题显示出我已经说过的一些无知。但是,它不适合任何项目:
- 我可能不会将其用于数据仓库或大型报表应用程序。
- 我可能不会在高度规范化或异国情调的旧数据库中使用它(在这种情况下,像mybatis这样的数据映射器可能是更好的选择)。
- 我可能不会在所有使用存储过程的现有系统上使用它。
- 我不会在非RDBMS数据存储中使用它:)
5)(…)当您的管理员说:请使用memcached进行缓存,并使用此优化查询代替您的查询时,会发生什么?
我告诉他,memcached可能不是我们上下文中的最佳解决方案(不,我不想一直通过网络发送数据,而且我不在乎Facebook / LiveJournal /
Twitter /无论使用什么,我们的应用可能有不同的需求),与Hibernate合作时还有其他更好的缓存实现,我请他与我讨论 问题 ,并讨论各种
解决方案 ,等等。我们作为一个团队工作,而不是互相反对。
综上所述,ORM解决方案并不总是合适的,但我认为您当前有偏见,我的经验与您的问题中表达的观点(怀疑?)不同。
也可以看看
- 何时不使用Java中的O / R映射



