首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC与Hibernate

JDBC与Hibernate
EN

Stack Overflow用户
提问于 2015-01-27 05:13:29
回答 4查看 41.3K关注 0票数 33

我们在web应用程序中使用JDBC已经很长时间了。我们使用它的主要原因是,我们有100%的控制代码,sql和修复的事情由我们的手。除此之外,我们在数据库中使用触发器,数据库由DB专家单独开发。

然而,现在很多人建议使用Hibernate,所以我们也考虑使用它。但是,我们发现了以下问题。

  1. Hibernate无法与“现有”数据库连接。它总是试图创造一个属于自己的。
  2. 我们的数据库可以通过不同平台(云、服务器、VPS、个人计算机)中的同一个应用程序访问。Hibernate会因为在这种情况下的缓存而造成问题。
  3. 我们从来不喜欢将“表创建工作”交给java代码。我们总是手动创建表。
  4. 我们可能需要使用非常长和复杂的SQL语句。上一次我们使用的语句超过150行,连接了20多个表。当涉及到冬眠时,我们怀疑我们是否会在这方面遇到麻烦。
  5. 我们的SQL代码是好的和标准的。Hibernate生成的代码对我们来说似乎有点脏。
  6. 我们总是使用MySQL。永远不要使用任何其他DB。
  7. 我们创建的应用程序需要最大限度的安全性,与医疗相关。如果至少有一条数据记录被泄露,我们就完了。
  8. 数据库中有大量的foreign keysPrimary KeysComposite KeysUnique Keys等。在论坛上,一些人抱怨Hibernate弄乱了这些。
  9. 我们决定尝试hibernate,因为有些人声称,“您是软件工程师吗?您正在使用已经死掉的JDBC!”

考虑到这些,请让我知道上面的观点是否真实(就像我说的,我是通过谷歌、讨论等方式了解到的)。另外,Hibernate和JDBC的优缺点是什么?

EN

回答 4

Stack Overflow用户

发布于 2015-01-27 05:32:38

回答上述问题:

1. Hibernate无法与“现有”数据库连接。它总是试图创造一个属于自己的。

这是错误的。Hibernate 可以连接到现有的数据库,而且它并不总是尝试重新创建它。您只需要像hbm2ddl. auto这样的参数。

2.我们的数据库可以通过不同平台(云、服务器、VPS、个人计算机)的同一应用程序进行访问。Hibernate会因为在这种情况下的缓存而造成问题。

Hibernate有一个可调整的缓存,所以这也不是问题。

3.我们从来不喜欢将“表创建工作”交给java代码。我们总是手动创建表。

没问题。见上文第1页。此外,还有一些用于间接表创建和更新的简化库(如液基),这些库可以与hibernate完美地结合使用。

4.我们可能需要使用非常长而复杂的SQL语句。上一次我们使用的语句超过150行,连接了20多个表。当涉及到冬眠时,我们怀疑我们是否会在这方面遇到麻烦。

如果需要,始终可以直接使用JDBC调用,并通过hibernate调用原生SQL查询。

5.我们的SQL代码是好的和标准的。Hibernate生成的代码对我们来说似乎有点脏。

同样,如果您必须调用一些逻辑复杂的SQL代码,而不是hibernate自动生成的,那么您可以这样做。

6.我们总是使用MySQL。永远不要使用任何其他DB。

一点问题都没有。Hibernate有特殊的MySQL方言支持:org.hibernate.dialect.MySQLDialect

7.我们创建的应用程序需要最大限度的安全性,与医疗相关。如果至少有一条数据记录被泄露,我们就完了。

安全问题与ORM技术无关。Hibernate只是纯数据库JDBC调用和程序员工具之间的逻辑和方便的面向对象层。它不会以某种方式影响普通的网络安全。

票数 30
EN

Stack Overflow用户

发布于 2015-01-27 09:28:52

Hibernate是一个很好的工具,您可以找到大量关于它的文档、书籍和博客文章。

我将谈谈你的所有关切:

Hibernate无法与“现有”数据库连接。它总是试图创造自己的一个。

Hibernate应该使用单独的数据库模式管理过程,甚至用于集成测试。您应该使用增量版本控制工具(如FlywayDB )来管理模式更改。

我们的数据库可以通过不同平台(云、服务器、VPS、个人计算机)中的同一个应用程序访问。Hibernate会因为在这种情况下的缓存而造成问题。

您不必使用第二级缓存,后者使用第三方缓存实现。所有缓存解决方案都可能破坏事务一致性。第一级缓存保证会话级的可重复读取,并且在保持乐观锁定的情况下,您可以防止丢失的更新

我们从来不喜欢将“表创建工作”交给java代码。我们总是手动创建表。

数据库应该与您的ORM工具分开。不管怎么说,这是最好的做法。

我们可能需要使用非常长和复杂的SQL语句。上一次我们使用的语句超过150行,连接了20多个表。当涉及到冬眠时,我们怀疑我们是否会在这方面遇到麻烦。

Hibernate对于写操作和并发控制非常有用。对于高级查询(窗口函数,CTE),仍然需要使用本机SQL。但是Hibernate允许您运行本机查询。

我们的SQL代码是好的和标准的。Hibernate生成的代码对我们来说似乎有点脏。

您不需要也不应该使用hbmdll实用程序。

我们总是使用MySQL。永远不要使用任何其他DB。

那就更好了因此,您可以在不考虑数据库可移植性问题的情况下使用预先的本机查询。

我们创建的应用程序需要最大限度的安全性,与医疗相关。如果至少有一条数据记录被泄露,我们就完了。

Hibernate并不会阻止您保护数据库或数据访问代码。您还可以在Hibernate中使用数据库安全措施。您甚至可以使用碧玉来启用各种与安全相关的特性:

  • 高级密码散列
  • 双向加密

数据库中有大量的外键、主键、复合键、唯一键等。在论坛上,一些人抱怨Hibernate弄乱了这些。

所有这些都由Hibernate支持。除了JPA约定之外,Hibernate还为任何外来映射提供了特定映射

我们决定尝试hibernate,因为有些人声称,“您是软件工程师吗?您正在使用已经死掉的JDBC!”

这不是从你已经掌握的库中切换的正确论据。如果您认为可以从使用Hibernate中获益,那么这是从JDBC切换的唯一令人信服的原因。

票数 18
EN

Stack Overflow用户

发布于 2015-01-27 05:40:23

使用普通的旧JDBC并不意味着您缺少IT行业,相反Hibernate也在底层使用JDBC。

它给我们带来了什么优势,我们应该寻找什么。

(1) Cache机制。

2.)管理sessionstransactions等。

3.)减少编写查询的工作量,减少hibernate的更多实用程序,如Query APICriteria APIHQL

您提出的问题或多或少都包含在Hibernate文档中。

还有更多的缓存策略可用的ehcache,无限,取决于我们正在部署的服务器,JBOSS,Weblogic,Tomcat等++环境,如云、分布式缓存等。

Hibernate仍然为您提供了关闭自动创建模式和指向您创建的模式的选项。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28163670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档