当前位置: 首页 > 面试题库 >

ORM解决方案(JPA; Hibernate)与JDBC

陆博易
2023-03-14
问题内容

我需要能够在内存中的HSQL数据库中每5秒以至少8000个对象的一致速率插入/更新对象

我已经在Spring / Hibernate / JPA和纯JDBC之间进行了一些比较性能测试。我发现使用HSQL的性能存在显着差异。通过Spring /
Hib / JPA,我可以在5秒钟内插入3000-4000个1.5
KB对象(具有一对多和多对多关系),而直接JDBC调用我可以插入10,000-12,000个相同的对象。

我不知道为什么会有如此巨大的差异。我已经对Spring / Hib / JPA设置进行了很多调整,以使性能接近而不失运。我想将Spring / Hib /
JPA用于将来的目的,可扩展性,并且因为很难手动维护外键关系(一对多)。但是性能要求似乎指向使用纯JDBC。

关于为何会有如此巨大差异的任何想法?


问题答案:

我们在批处理方式下将Hibernate与JDBC进行比较有类似的经验(Statement#executeBatch())。基本上,似乎Hibernate在批量操作方面做得不好。在我们的案例中,Hibernate实现在我们的生产硬件上足够快。

您可能想要做的是将数据库调用包装在DAO中,从而为您的应用程序提供一致的访问数据的方式。在方便的地方,使用Hibernate来实现DAO,而在性能要求的情况下,通过JDBC来实现。



 类似资料:
  • 好的,对于前面提到的技术,这是一个非常奇怪的行为,我有一个控制器,它调用一个服务,这调用一个dao。传递给持久化的实体有一个带有注释的字段,当我为dao或服务运行测试并插入重复值时,会抛出异常这是正常的,是预期的行为。但是,当我运行web应用程序时,异常会在服务完成执行后抛出。在执行dao时不会。因此,这迫使我在控制器中捕获异常,而不是在服务中。 控制器启动 服务//继续 DAO//继续(但是此时

  • null > ORM:Object Relational Mapping是将数据从面向对象语言转换到关系数据库的概念/过程,反之亦然。例如,在java中,它是在反射和JDBC的帮助下完成的。 Hibernate:它是上述概念的实现。 JPA:它是ORM之上的一个步骤。它的高级API和规范使得不同的ORM工具可以实现,从而为开发人员提供了从一个ORM到另一个ORM的实现的灵活性(例如,如果应用程序使

  • 问题内容: 我知道N + 1问题是执行一个查询以获取N个记录,执行N个查询以获取一些关系记录。 但是如何在Hibernate中避免这种情况? 问题答案: 假设我们有一个制造商类,与Contact有多对一关系。 我们通过确保初始查询能够获取在适当的初始化状态下加载所需对象所需的所有数据来解决此问题。一种方法是使用HQL提取联接。我们使用HQL 与fetch语句。这导致内部联接: 使用条件查询,我们可

  • 1px 方案在 VUX 组件内应用广泛,包括 Grid, ButtonTab, XTable, XButton, Cell 等等。 利用 Flexbox + 1px 你可以实现复杂的宫格布局。 引入 在你项目的App.vue引入,组件内不需要再重复引入。 <style lang="less"> @import '~vux/src/styles/1px.less'; </style> 可用类名:

  • 你可以看到,虽然我们有一些复制对象的方法,但是我们没有使它不可变,因为我们可以将episode的属性设置为8.另外,在这种情况下我们如何修改episode属性? 我们通过调用assign: name: 'Star Wars', console.log(movie1.episode); // writes 7