簡體   English   中英

Spring 啟動 JPA 獲取列表並向其中添加項目會引發錯誤

[英]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 返回由數組支持的集合,不能使用addaddAll修改它。 您需要像在問題中一樣創建列表:

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

更多示例:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM