![](/img/trans.png)
[英]Spring Boot Data JPA manyToMany add item throws UnsupportedOperationException
[英]Spring boot JPA fetch a list and add an item to it throws error
我正在使用 JPA 并且我有一个名为 Order 的实体/类。 我有一个 rest GET
端点来通过 id 获取订单。 它工作得很好。 订单实体如下所示:
@Entity
public class Order {
@Id
private Long id;
@Column
private List<String> transactionRefs;
}
现在,在一个特定场景中,我需要从数据库中获取订单并将另一个项目添加到 transactionRefs 并保存它。 所以我做如下:
Order order = orderRepository.findById(1).get();
List<String> transactionList = order.getTransactionRefs();
transactionList.add("transaction-ref");
执行此操作时出现以下错误:
java.lang.UnsupportedOperationException: null\n\tat java.util.AbstractList.add(AbstractList.java:148)
如果我按照以下方式进行操作,则可以解决问题:
Order order = orderRepository.findById(1).get();
List<String> transactionList = order.getTransactionRefs();
transactionList = new ArrayList<>(transactionList);
transactionList.add("transaction-ref");
所以,我需要知道我的方向是否正确,这是预期的错误情况。
更新:
每当我们向列表中添加项目时,我们都有以下条件:
if (transactionRefs == null) {
transactionRefs = new ArrayList<>();
}
因此,每当第一次保存 transactionref 时,我们将其转换为 ArrayList。
更新 2:
下面是 transactionRef 的 getter:
public List<String> getTransactionRefs(){
if (this.transactionRefs != null) {
return Arrays.asList(this.transactionRefs.split(","));
}
return null;
}
这是您的异常的原因
return Arrays.asList(this.transactionRefs.split(","));
Arrays.asList 返回由数组支持的集合,不能使用add
或addAll
修改它。 您需要像在问题中一样创建列表:
List<String> transactionList = order.getTransactionRefs();
transactionList = new ArrayList<>(transactionList);
更多示例:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.