【发布时间】: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