[英]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
。 看來User
的userGroups
的persistentBag
類型是不可編輯的。 我嘗試僅創建一個新集合來存儲現有和新用戶組,但是當我嘗試保存更新的A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance
時A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance
另一個錯誤用戶。 我如何達到級聯兒童合並的要求?
因此,問題是由於我為測試准備的用戶組列表不可修改
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.