簡體   English   中英

在Spring + JPA中更新級聯子級時出現UnsupportedOperationException

[英]UnsupportedOperationException when updating cascading children in Spring+JPA

我在SpringBoot項目中使用OneToMany映射,而在更新子代和父代更新時遇到問題,示例代碼如下:

User.java

@Table(name = "user")
@Entity
public class User {
    @Id
    @GeneratedValue
    private Integer id;

    @OneToMany(mappedBy = "groupUser", cascade = {CascadeType.ALL}, orphanRemoval = true)
    private List<UserGroup> userGroups = new ArrayList<>();
}

UserGroup.java

@Table(name = "user_group")
@Entity
public class UserGroup {
    @Id
    @GeneratedValue
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="user_id")
    private User groupUser; 
}

SampleUsageCode.java

    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepositry;

        @Transactaional
        public batchUpdateUsers(Collection<User> toBeSavedUsers) {
            Map<Integer, User> toBeSavedIdUserMap = toBeSavedUsers.stream()
.collect(groupBy(User::getId(), toList()));
            Collection<User> existingUsers = userRepositry.findByIdIn(toBeSavedIdUserMap.entrySet().stream()
.map(Map.Entry::getKey).collect(toList()));
            existingUsers.forEach(user -> user.getUserGroups().add(toBeSavedIdUserMap.get(user.getId()).getUserGroups()));
        }
    }

為了簡化此問題,我們假設要保存的用戶中的用戶組與數據庫中的現有用戶組完全不同。 問題是,當我嘗試將新用戶組添加到現有用戶時,它拋出java.lang.UnsupportedOperationException 看來UseruserGroupspersistentBag類型是不可編輯的。 我嘗試僅創建一個新集合來存儲現有和新用戶組,但是當我嘗試保存更新的A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instanceA collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance另一個錯誤用戶。 我如何達到級聯兒童合並的要求?

因此,問題是由於我為測試准備的用戶組列表不可修改

暫無
暫無

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

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