- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何使用 Hibernate (4) 和 Oracle 设置减少 SQL 更新。
一个简单的例子可能是这样的:
打开一个 session /事务,使用session.save()创建一个新的实体Xyz,处理一些业务逻辑,对Xyz进行一些更改并调用session.update(),然后让 session 正常关闭并通过提交进行 hibernate 到数据库。
提交时,Hibernate 将执行一次插入,然后执行更新 - 但它真正需要做的只是一次插入,但在本例中具有 Xyz 的 latest 属性。
有人有做这类事情的想法/模式吗?或者有什么办法可以改变 Hibernate 的行为吗?或者您对此有何看法 - 这是一个完全的反模式吗?
我知道 Hibernate 足够聪明,可以在一个更新覆盖另一个更新时忽略多个更新 - 那么为什么插入不类似呢?
这个小片段可以重现“问题”:
MyEntity e = new MyEntity("xxx");
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(e); e.setName("yyy");
session.getTransaction().commit();
session.close();
顺便说一下,我没有什么值得担心的触发因素。
这个例子非常简单,性能问题可能看起来微不足道,但实际上我正在处理一个更复杂的对象(即多次插入和更新),而且容量很大,因此避免更新会很棒。
最佳答案
Is there a way I could add the object to the session, and it would be marked as persistent, but not call save() (that is, the INSERT will not be generated) until the very end?
考虑重构以使用Session.persist(Object)
而不是Session.save(Object)
如果你想推迟 INSERT
的执行直到 session 被刷新和/或事务关闭。
摘自 JBoss Hibernate Community documentation 的第 10.2 节:
You can also use persist() instead of save(), with the semantics defined in the EJB3 early draft.
persist()
makes a transient instance persistent. However, it does not guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time.persist()
also guarantees that it will not execute anINSERT
statement if it is called outside of transaction boundaries. This is useful in long running conversations with an extended Session/persistence context.save()
does guarantee to return an identifier. If anINSERT
has to be executed to get the identifier ( e.g. "identity" generator, not "sequence"), thisINSERT
happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context.
另一个有用的引用可以在 blog article 的“将它们放在一起”部分顶部的方法到场景网格的左上角单元格中找到。描述 persist()
的行为对于从未持久化的对象,如下所示:
- Object added to persistence context as new entity
- New entity inserted into database at
flush()
/commit()
关于hibernate - 使 hibernate save() 和 update() 作为单个插入优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940818/
命令 npm update 有什么区别和包裹npm-check-updates ?使用后者是否完全安全? 执行后好像是npm update并非所有软件包都已更新,因此似乎不完整。许多其他 popula
我有使用 ExpressJS 和 ORM Sequelize 的 API。我正在尝试使用 Sequelize 中的 update() 方法进行更新。默认情况下,it 方法将返回更新的行数。但我希望结果
关于如何更新 rubygems 有点困惑。过程不断变化(或者至少我从互联网上得到了相互矛盾的信息)。 $ gem outdated rubygems-update (1.8.10 < 1.8.11
我正在使用 webpack-dev-server处于开发模式( watch )。每次服务器重新加载时,一些 json 和 js 文件都会挤满我的构建目录,如下所示:'hash'.hot-update.
Mamp Pro 的当前版本是 5.04 (15996)。可用更新窗口显示“Mamp 5.0.0 > 5.1。更新失败,并显示一条消息:错误:无法验证更新。请确保您使用的是安全网络,然后重试。” 更新
我想在浏览量增加时更新时间戳“lastpageview_at”。我想我已经接近了,但我总是遇到语法错误,有人知道为什么或有其他解决方案吗? 我的触发器: CREATE TRIGGER Update_l
我正在执行 SELECT ... FOR UPDATE 以锁定一条记录,然后进行一些计算,然后进行实际的 UPDATE。我正在处理 InnoDB 数据库。 但是计算可能会以我不想执行 UPDATE 的
我需要在表更新时进行一些更新和插入以强制执行正确的数据。将 UPDATE 语句放入触发器中会导致某种“循环”吗? 谢谢! 最佳答案 更新触发器中的目标表将使触发器再次触发。 您可以使用 TRIGGER
这是我的布局 当我点击链接更新时,该链接应该打开和关闭renderComment bool
我有一个包含两件事的 Angular 范围: 一个包含 10k 行的巨型表格,需要一秒钟才能渲染 一些小的额外信息位于固定的覆盖标题栏中 根据您向下滚动页面/表格的距离,我必须更新标题中的小信息位之一
标题几乎已经说明了一切。 IF NEW.variance <> 0 THEN (kill update) END IF 这可能吗? 最佳答案 查看手册 (http://dev.mysql.com/do
我有几个表,我想强制执行版本控制,并且有一个生效日期和生效日期。每当应用程序或用户向该表写入更新时,我希望它重定向到两个全新的命令:更新目标记录,以便 EFFECTIVE_TO 日期填充当前日期和时间
我正在使用 Shopware,一件奇怪的事情让我抓狂 :( 所以我将首先解释问题是什么。 除了普通商品外,还有多种款式的商品,例如不同尺码的衬衫。这是 XS、S、M、L 和/或不同颜色的同一商品……但
寻求帮助制作 mysql 触发器。我当前的代码无法按预期工作。我想做的是,如果表A中的字段A被修改,则将字段A复制到表A中的字段B。 当前代码如下所示: BEGIN IF new.set_id=301
以下查询(来自此处Postgres SQL SELECT and UPDATE behaving differently) update fromemailaddress set call =
我想使用 D3 使用以下数据创建一个列表: var dataSet = [ { label: 'a', value: 10}, { label: 'b', value: 20},
哪个更好,先进行选择,然后进行更新。或者更确切地说,像这样合而为一: UPDATE items set status = 'NEW' where itemid in (1,2,3,
对于 eloquent model events,updating 和 updated 之间有什么区别? ? 我的猜测是 updating 在模型更新之前触发,而 updated 在模型更新之后触发。
我有一个对象数组(我们称之为arr)。在我的组件输入之一的 (change) 方法中,我修改了这些对象的属性之一,但在 View (*ngFor) 中没有任何变化。我读到 Angular2 变化检测不
我正在尝试使用 d3.js 构建水平日历时间线。主要目标是突出显示用户的假期和假期。 http://jsbin.com/ceperavu/2/edit?css,js,output 我首先从“开始”日期
我是一名优秀的程序员,十分优秀!