Một vấn đề mà tôi thường phải đối mặt với Hibernate là có một danh sách (gọi nó là listA) của các đối tượng mà tôi muốn tồn tại đối với một thực thể (myEntity) nhưng trước tiên phải so sánh chúng với danh sách hiện có trên thực thể và xóa các danh sách không có trong danh sáchA. Cách đơn giản để thực hiện điều này là xóa danh sách trên thực thể và chỉ cần thêm tất cả danh sáchA vào thực thể, tuy nhiên tôi thường phải thực hiện một số xác nhận trên các phần tử trước khi chúng bị xóa - ví dụ:. để kiểm tra xem người dùng này có được phép xóa chúng hay không.Hibernate: Cách tốt nhất để xóa các phần tử trong bộ sưu tập
cách tiếp cận hiện tại của tôi cảm thấy lúng túng:
//Delete the elements that have been removed
//Use toArray to avoid ConcurrentModificationException
for(ObjectA a : myEntity.getObjectAList().toArray(new ObjectA[myEntity.getObjectAList().size()])) {
if(!listA.contains(a)) {
//Check if this element can be deleted
if(canDelete(a)) {
entityManager.remove(a);
myEntity.getObjectAList().remove(a);
}
}
}
//Add the elements that don't already exist
for(ObjectA a : listA) {
if(!myEntity.getObjectAList().contains(a)) {
myEntity.getObjectAList().add(a);
}
}
Bất cứ phòng nào để cải thiện?
Cảm ơn.
Tôi không thể sử dụng removeAll() vì tôi cần thực hiện một số xác thực đối với các thành phần riêng lẻ trước xóa chúng. Cảm ơn bạn đã sử dụng mẹo Iterator. – Damo
Tôi nghĩ rằng điểm của removeAll là nó sẽ cắt danh sách trên đối tượng của bạn xuống những người bạn cần phải kiểm tra để xóa. Sau đó, bạn kiểm tra tất cả những thứ đó và xóa nếu được phép. Sau đó, bạn có thể thêm tất cả listA mà không kiểm tra xem chúng đã có sẵn chưa bởi vì bạn đã xóa chúng. – digitaljoel