对不起听说我质问了,请删帖

我通过代码批量向一个列表添加数据,是通过DC的getMutableItems.add()方法,最后调用dataContext.commit();来提交到数据库,有时候提交会失败,但是失败的数据已经被add到DC了,并且在列表显示出来了,请问有没有方法可以让DC的数据回滚(不要重刷数据库)?

dataContext.commit()的提交是在一个事务里,你所说的“失败的数据”是指什么?
这个提交要么成功,要么不成功,不存在一部分失败这种情况。
所以在数据库提交不成功时再使用 getMultableTitems.remove() 移除掉之前添加的数据就可以了。

比如提交了10条数据,其中有一条数据有违反数据库唯一约束的情况,在commit的异常中好像不知道是哪一条出的错误

你最初的问题是什么?不是 “请问有没有方法可以让DC的数据回滚(不要重刷数据库)?” 吗 ?

咱们一个问题一个问题解决,你这样我们也不知道你的关键问题在哪? 最初提的问题也不知道解决没有。

如果是新的问题,请发新的帖子讨论。

就是一个问题啊,往DC里面加了10条记录,然后调用commit,其中的某一条因为违法了数据库唯一约束导致提交失败了,但是发现DC里面依然还是有添加进去的数据(界面显示出来了)

你的问题是 “如何知道哪条数据违反唯一约束”?还是“数据如何回滚” ?

我如果知道哪条违反了唯一约束,我可以把他从DC里REMOVE出来,我说的回滚数据是指从DC里回滚,不是说数据库的回滚。

你的意思是你一次提交10条记录,会有部分成功写入数据库,部分写入失败?

我的意思是,我想从commit的异常里得知是哪几条提交失败了。然后我把那几条从DC里面remove掉。

这个回复有什么问题吗

之前没说明白,用户批量往表格里面添加数据,假设他添加了1000条数据,然后提交,其中有3条数据导致了提交异常,确实都没有提交到数据库。但是如果我直接把1000条数据全部从DC移除出去,用户又需要重复添加,所以我希望只把出问题的3条记录移除出去,这样用户可以继续操作,并成功提交其余997条数据。所以我问的是在commit异常里能否获得出错的那几个实体?

业务角度,这个情况需要做数据校验,不要在提交时才处理数据问题。 如 @Ray.Lv 所说,数据库级别一个 transaction 的提交,不会有部分失败的情况,这是数据库事务最基本的原子性。

要不试试用dataManager一个一个commit。
假设你1000个里面第一条就commit错误,后面999都不会再去尝试commit了吧。

如果你的业务不能部分commit,好像只能自己加校验代码。

公开的帖子都是免费讨论的帖子,我们在这里提供的服务也都是免费的。

但是免费的不代表不值得尊重。

如果你觉得 CUBA 不好,或者有各种各样的问题,都欢迎提出来,不需要使用质问的口气。如果我们没有理解您的意思,请尽量描述的清楚一些,提供截图、代码等任何能帮助我们理解您问题的材料。另外,您提出的在项目实施中遇到的问题我们也会尽量帮助解决。

关闭帖子一个很重要的标准就是,经过我们内部讨论,这个帖子的问题已经得到解决,而继续讨论只会导致主题偏移或者无休无止的争辩。