java - Spring boot JPA 获取列表并向其中添加项目会引发错误

标签 java spring-boot jpa arraylist collections

我正在使用 JPA,并且有一个名为 Order 的实体/类。我有一个休息 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 返回由数组支持的集合,并且不能使用 addaddAll 对其进行修改。您需要像在问题中所做的那样创建列表:

List<String> transactionList = order.getTransactionRefs();
transactionList = new ArrayList<>(transactionList);

更多示例:

关于java - Spring boot JPA 获取列表并向其中添加项目会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62636093/

相关文章:

java - 什么时候使用全局事务或者使用spring aop进行事务

java - 将应用程序根目录 ("/")映射到我的上下文根目录

java - spring boot jdbc 连接

java - 在 RESTful API 中创建和验证实体模型及其 DTO 的正确方法是什么?

java - 如何在指定时区的 hibernate 中获取记录?

java - 不能重用方法android OOP

java - 目标无法访问, 'null' 在 JSF 中返回 null

java - 我的实体中未设置外键

java - 如何自定义 spring-data Repository 方法名称?

java - 我应该如何使用jdbc将vararray从plsql发送到java?