Java 将hibernate中的会话转换为JDBC连接中的会话
为了克服使用hibernate时产生的开销,我将从hibernate转换回普通JDBC。我想知道如何处理与hibernate相关的会话。我应该如何转换回普通JDBC,以便用JDBC连接替换我的所有会话。如果我的想法有误,请告诉我用连接替换会话会转换回普通的JDBC,因为我对这些概念不太熟悉,也不知道我的方法是否正确。我在高性能任务中广泛使用Hibernate,包括批量插入数百万条记录。您的问题不在于Hibernate,而在于您使用它的方式 最重要的是,不要将Hibernate用作持久状态管理器;将其用作原始SQL之上的薄层,您就不会抱怨性能了Java 将hibernate中的会话转换为JDBC连接中的会话,java,hibernate,session,jdbc,Java,Hibernate,Session,Jdbc,为了克服使用hibernate时产生的开销,我将从hibernate转换回普通JDBC。我想知道如何处理与hibernate相关的会话。我应该如何转换回普通JDBC,以便用JDBC连接替换我的所有会话。如果我的想法有误,请告诉我用连接替换会话会转换回普通的JDBC,因为我对这些概念不太熟悉,也不知道我的方法是否正确。我在高性能任务中广泛使用Hibernate,包括批量插入数百万条记录。您的问题不在于Hibernate,而在于您使用它的方式 最重要的是,不要将Hibernate用作持久状态管理器;
无状态会话
(它适用于除保存
操作之外的所有需要的操作)`李>
列表
、使用迭代
或滚动
最后,如果您真的想要一种简单、不安全和不可伸缩的方法,那么您可以直接从JDBC驱动程序创建连接。这种方法实际上只适用于学校作业,即使在最小的有生产价值的项目中也不推荐使用。我在高性能任务中广泛使用了Hibernate,包括批量插入数百万条记录。您的问题不在于Hibernate,而在于您使用它的方式 最重要的是,不要将Hibernate用作持久状态管理器;将其用作原始SQL之上的薄层,您就不会抱怨性能了
无状态会话
(它适用于除保存
操作之外的所有需要的操作)`李>
列表
、使用迭代
或滚动
最后,如果您真的想要一种简单、不安全和不可伸缩的方法,那么您可以直接从JDBC驱动程序创建连接。这种方法实际上只适用于学校作业,即使在最小的有生产价值的项目中也不推荐使用。Hibernate会话远不止是JDBC连接。它包含多个这样的连接(通常通过回收JDBC连接实例的JDBC连接池进行管理)、一组连接到所述会话并由其管理的实体以及其他东西(缓存等) 删除Hibernate并只使用JDBCAPI执行所有操作,这意味着不仅仅是用一个或多个JDBC连接替换Hibernate会话实例,然后将Hibernate代码复制到类似的JDBCAPI调用中。如果您只这样做,您只需要做大量的工作,而不必付出任何代价,因为您将失去Hibernate的所有优势(更少的详细代码、更高级别的抽象,等等),而没有获得JDBC的优势(使用的堆内存更少,方法调用更少(是的,即使使用Hibernate的Javassist魔法,在某些情况下,这仍然会影响性能)更细粒度地控制数据库交互等) 我的建议是,首先认真研究一下你的应用程序存在的问题(显然是由于Hibernate造成的),至少对于主要的问题,试着首先看看如果不摆脱Hibernate,你是否无法对其进行优化。是的,Hibernate可能会变得沉重和内存不足,但性能问题往往来自对框架的不当使用(您确定要在一个查询中获取所有必要的关联实体,还是让Hibernate在后台进行隐藏联接或伪联接?您是在数据库端进行数据操作,还是在执行了一个更通用的Hibernate查询以获取数据后,在Java代码中完成了其中一些操作?等等。) 如果您真的需要摆脱Hibernate(可能您需要使用数据库的一些非常特定的功能,这些功能不是标准SQL,Hibernate不允许您访问,例如MySQL通过自定义平面文件格式导入大量数据),那么请确保您正在用它替换它(简单的JDBC,或者其他一些