【问题标题】:How to flush a single entity in a hibernate session如何在休眠会话中刷新单个实体
【发布时间】:2011-10-28 01:18:11
【问题描述】:

我需要能够在较大的 Hibernate 事务期间将单个实体刷新到数据库。

我不想提交事务,因为附加到事务的某些实体不一致并且还不能刷新到数据库,但是我需要一个实体来刷新,因为稍后在事务中这个实体是包含在聚合查询中以验证交易。

我们有一个数量行项目需要保存到数据库,因为稍后(在同一个事务中)我们从同一个表中选择总和(数量),结果数量必须符合整个事务的特定标准有效。

如果数量没有保存,则sum(quantity)返回错误的值,如果保存了则sum正确,可以完成剩下的事务处理。

我也不能将订单项的数量“仅添加”到总和结果中,因为实际上有许多订单项都在不同的位置,并且调用总和的位置与项目已添加。

如果我可以在当前事务中将单个行项刷新(SQL 插入)到数据库,系统将正常工作。

更多信息:

我发现我在 SQL Server 上没有遇到这个问题,但在 Oracle 上却有。这很奇怪..

所以我找到了它,似乎在 Hibernate 内部,当您调用“saveOrUpdate”时,系统会查看实体的@Id 是如何生成的。

在 SQL Server 中,我们有一个标识列,实体获取其 ID 的唯一方法是插入(这就是我想要的),而在 ORACLE 中它不支持标识,因此使用序列来生成每列的 ID。

由于ORACLE不需要插入记录来生成ID意味着实体没有插入,而它在SQL Server上。

总结

所以看起来Hibernate确实支持选择性插入,但到目前为止它只在IT需要时插入,现在我需要找到是否有办法可以强制它。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我不认为你能做到这一点,据我所知,这是“全有或全无”。相反,您能否获取保存在数据库中的当前总和(数量),然后将要保存的额外数量添加到其中,然后执行验证?

    【讨论】:

    • 我认为你是对的,但有趣的是,如果 Hibernate 需要 Id,它会选择性地插入这些记录,所以内部有一定程度的支持,我自己可以访问它就好了.
    猜你喜欢
    • 2020-02-16
    • 2019-03-26
    • 2014-09-12
    • 2021-01-30
    • 1970-01-01
    • 2015-08-14
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多