gpt4 book ai didi

java - 如何从 @Transactional 标记的方法返回所有错误?

转载 作者:行者123 更新时间:2023-12-02 13:41:21 24 4
gpt4 key购买 nike

如果之前有人问过这个问题,我很抱歉。我是 Spring 框架的新手,我有一个关于 @Transactional 的实际问题以及我遇到的问题。

在一个循环中,我使用 JDBC 和 SQL 存储过程将一些对象插入到数据库中。对于某些/没有/所有对象,插入可能会因某种原因失败。如果所有插入都没有错误就OK,否则必须做两件事。首先需要回滚所有成功的插入,并返回所有错误的列表。

到目前为止,我已经想出了一个执行回滚的代码,但我不知道如何返回带有错误的数组。

@Transactional
public String[] insertSomeObjects(SomeObject[] some){
List<String> errors = new ArrayList<String>();
for(SomeObject temp:some){
try{
jdbcInsertFunction(temp);
}catch(Exception ex){ // If error occurs, ad it to error list
String error = createProperErrorMessage(ex);
errors.Add(error);
}
}
if (errors.size >0){
// If there are errors, throw exception and roll back
Throw new Exception
}
}

这段代码工作正常,它插入所有对象,如果其中任何一个失败,它就会回滚。问题是我无法返回错误列表。

你知道如何解决这个问题吗?

最佳答案

您可以使用suppressed异常(exception):

public static void main(String[] args) throws TransactionRolledbackException {


TransactionRolledbackException te = null;

for (int i = 0; i < 3; i++) {

try{
//doStuff
throw new NullPointerException("Exception no:" + i );
}catch (Exception e) {
if(te == null){
te = new TransactionRolledbackException();
}

te.addSuppressed(e);
}


}


if(te != null){
throw te;
}
}

输出:

Exception in thread "main" javax.transaction.TransactionRolledbackException
at chapter4.Exceptionsss.main(Exceptionsss.java:18)
Suppressed: java.lang.NullPointerException: Exception no:0
at chapter4.Exceptionsss.main(Exceptionsss.java:15)
Suppressed: java.lang.NullPointerException: Exception no:1
at chapter4.Exceptionsss.main(Exceptionsss.java:15)
Suppressed: java.lang.NullPointerException: Exception no:2
at chapter4.Exceptionsss.main(Exceptionsss.java:15)

关于java - 如何从 @Transactional 标记的方法返回所有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com