如标题中所述,我有一个sql = sql % tuple('?' * len(params)) TypeError: not enough arguments for format string
,我正在寻找解决问题的正确方法。
下面是引发异常的代码。但是,当我将ConcurrentModificationException
更改为stream()
时,错误消失了。是解决它的正确方法吗?
parallelStream()
提交方法:
@Override
@Transactional
public boolean submitAll(Long depId) {
try {
departmentService.findById(depId)
.getGroups()
.stream()
.flatMap(gr->gr.getSubgroups().stream())
.flatMap(sub->sub.getInvoices().stream())
.filter(Invoice::isActive)
.forEach(inv->invoiceService.submit(inv));
return true;
} catch (Exception ex){
ex.printStackTrace();
return false;
}
}
堆栈跟踪
@Override
@Transactional
public Invoice submit(Invoice invoice) {
List<InvoiceItem> newItems = invoice.getItems();
List<InvoiceItem> newInvoiceItems = newItems.stream().map(el->{
InvoiceItem item = new InvoiceItem();
item.setComponent(el.getComponent());
item.setCategoryForPresentation(el.getCategoryForPresentation());
List<InvoiceItem> subs = el.getSubItems()
.stream()
.map(sel->{
InvoiceItem subItem = new InvoiceItem();
subItem.setComponent(sel.getComponent());
subItem.setCategoryForPresentation(sel.getCategoryForPresentation());
subItem.setCurrency(sel.getCurrency());
subItem.setInvoiceCategory(sel.getInvoiceCategory());
subItem.setPurchaseType(sel.getPurchaseType());
subItem.setVendor(sel.getVendor());
subItem.setQuantity(sel.getQuantity());
subItem.setUnitPrice(sel.getUnitPrice());
subItem.setVersion(sel.getVersion()+1);
return subItem;
}).collect(toList());
item.setSubItems(subs);
item.setCurrency(el.getCurrency());
item.setInvoiceCategory(el.getInvoiceCategory());
item.setPurchaseType(el.getPurchaseType());
item.setVendor(el.getVendor());
item.setQuantity(el.getQuantity());
item.setUnitPrice(el.getUnitPrice());
item.setVersion(el.getVersion()+1);
return item;
}).collect(toList());
List<InvoiceItem> all = new ArrayList<>();
all.addAll(invoice.getAllItems());
all.addAll(newInvoiceItems);
invoice.setItems(all);
invoice.increaseVersion();
return update(invoice);
}
预先感谢! :)