- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果有人已经回答了这个具体问题,但我还没有找到我的问题的答案,那么提前道歉。
我正在开发一个使用 DAO、Hibernate 和 POJO 以及所有用于通信和写入数据库的东西的应用程序(不,我不能给出工作代码,所以我很抱歉)。如果我在调用 Session.flush() 时没有大量数据要检查,这对应用程序来说效果很好。也就是说,有一个页面,用户可以在其中向产品添加任意数量的项目,并且有一种特殊情况,其中有大约 25 个项目。每个项目大约有 8 个字段,全部存储在数据库中。当我调用刷新时,它确实将所有内容保存到数据库中,但它需要永远才能完成。我调用的三行是:
merge(myObject);
Session.flush();
Session.refresh(myObject);
我已经尝试了很多不同的组合来解决这个问题和很多不同的解决方案,所以回来说“不要使用 flus()”并没有多大帮助,因为 saveOrUpdate() 和其他 hibernate session 似乎不起作用。我能想到的唯一解决方案是废弃整个项目(我们得到的代码是继承的,至少可以说写得不好)或者告诉用户社区接受它。
根据我对 Hibernate API 的理解,如果您想将数据写入数据库,它会对每个项目运行检查,如果存在差异,它会创建一个更新查询队列,然后运行查询。似乎每次都在更新此数据,因为即使其他值未更改,我数据库中的“DATE_CREATED”列也不同。
我想知道是否有另一种方法可以防止如此大量的数据提交,或者有一种方法可以将特定列从“检查” hibernate 中排除,这样我就不必提交所有 25 个项目,如果我只更改为 1?
提前致谢。
迈克
最佳答案
嗯,除非你使用 StatelessSession,否则你真的无法避免 hibernate 中的脏检查.当然,你会失去很多功能(延迟加载等),但这个决定取决于你。
另一种选择:我肯定会尝试在您的实体中使用 dynamic-update=true。喜欢:
@Entity(dynamicUpdate = true)
class MyClass
使用它,Hibernate 将只更新修改的列。在列数很少的小表中,它不是那么有效,但在您的情况下,它可能有助于加快整个过程,因为您无法避免使用常规 Hibernate Session 进行脏检查。更新几列而不是整个对象总是更好,对吧? This post详细讨论动态更新属性。
关于java - Hibernate Session.flush()效率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111350/
在MySQL中,执行FLUSH TABLES, PRIVILEGES;和执行FLUSH TABLES;再执行FLUSH PRIVILEGES;效果一样吗?此外,这是否适用于任何刷新选项(FLUSH L
在spring security生成类UserRole或 SecUserSecRole (你可以随便叫它)有一个命令可以创建 new UserRole()并用 .save(flush:flush, i
我正在使用 Hibernate 3.2.6。我正面临异常(exception)情况 save the transient instance before flushing 在我的代码中,有时我们在一个
我有一个 StreamWriter,它的底层流是一个 FileStream。以下代码是否保证 FileStream 也将其缓冲区刷新到文件系统上的实际文件中,还是我需要在 上显式调用 Flush()文
我在 ASP.NET Web API 中使用 PushStreamContent 将事件从服务器推送到客户端(使用服务器发送事件)。每次发送事件后,我都会在 Stream 上调用 Flush 以将缓冲
MSDN说FileStream.Flush(True) “还清除所有中间文件缓冲区。”。 “所有中间文件缓冲区”到底是什么意思? 最佳答案 它会将缓冲在文件系统缓存中的文件数据写入磁盘。该数据通常是根
在我的项目中,我有很多嵌套的对象,几天后服务器在每次查询执行时都变得非常缓慢。 我从object.save(flush:true)中删除了flush:true,这应该避免对象立即被数据库持久化,因为我
假设您需要将二进制数据写入标准输出: sys.stdout.buffer.write(data) 然后要刷新它,您可以使用以下两种方法之一: sys.stdout.flush() sys.stdout
我已经覆盖了 std::ostream::flush() 函数。下面我从示例中删除了所有其他代码: #include #include class CMyStream : public std::
我在我的服务中实现了取消 http 请求,我想测试它: angular.module('EmsWeb.Services').factory('DalService', ['$q', '$http',
有这个 Angular 组件: import { Component, OnDestroy, OnInit } from '@angular/core'; import { asyncSchedule
magento的缓存管理中“Flush Magento Cache”和“Flush Cache Storage”有什么区别? 最佳答案 有时,缓存位置(如 /tmp/)或服务(如 Memcache)会
我有一个实现 postFlush() 的 Hibernate 拦截器.据我了解,刷新后是数据已保存到数据库中,但在调用提交之前可能会回滚。如果我有一个看起来像这样的 hibernate 配置: tru
这是我第一次接触 Clojure,所以我尝试编写一个简单的脚本,它提供基于维基百科的翻译(欢迎任何批评/评论) 问题是:当我从翻译中删除(刷新)时,脚本输出 nil 而不是翻译后的单词。这是为什么?我
我正在开发 iPhone 应用程序并希望使用: CFStreamCreatePairWithSocketToHost(NULL, url, port, &serverReadStream, &serv
我有一个相机将图片发送到回调函数,我想使用 FFmpeg 用这些图片制作一部电影。我遵循了 decoding_encoding 示例 here但我不确定如何使用 got_output 刷新编码器并获取
is_master_def: volatile bool is_master_; is_master_ 值被另一个线程设置为 true,但似乎 is_master_ 值 dosnt 刷新(它没有计算出
什么意思 “我会在您将所有内容发送给客户端并刷新后执行此操作。” 谢谢你 最佳答案 刷新是对数据流进行缓冲时涉及的操作。 让我们假设一个普通的stdout 流。每个字节一到达就打印出来效率很低,这就是
我们正在开发 iMX6Sx Freescale 开发板,使用 Yocto 构建 Linux 内核发行版。我想知道是否有办法检查是否有可能检查文件系统操作(特别是写入)是否真的终止,避免在操作仍在进行时
我已经实现了一个 Java 程序,它通过 ServerSocket 从 GPS 设备读取数据。 ServerSocket serverSocket = new ServerSocket(13811);
我是一名优秀的程序员,十分优秀!