無法從 Spring Boot 應用程序中設置的 DBRef 中刪除

草履蟲

我的組對像有一組@DBRef 的用戶,每個用戶同樣有一組@DBRef 的組:

public class Group {
    @Id
    private String id;
    @Indexed(unique = true)
    private String name;
    @DBRef(lazy=true)
    private Set<User> users;

    //...
}
public class User {
    @Id
    private String id;
    @Indexed(unique = true)
    private String email;
    private String password;
    private String role;
    @DBRef(lazy = true)
    private Set<Group> groups;
    //...
}

當我刪除一個用戶時,我當然必須將他從他的組中刪除:

Set<Group> subscribedGroups = userRepository.findByEmail(email).getGroups();
for (Group g : subscribedGroups) {
    Set<User> users = g.getUsers();
    users.remove(user);
    g.setUsers(users); // not sure if this line is necessary but it doesnt work regardless
    groupRepository.save(g);
}

這不起作用。remove(user)由於某種原因返回 false。它應該可以工作;我打印了每個成員的 ID users,然後是user.getId(),然後是結果remove(user)

List of users:
61abd6f1c81ab948c31641f2

User to delete: 61abd6f1c81ab948c31641f2
Result of removal: false
chrylis -謹慎樂觀-

您似乎已經習慣了 JPA,它使用各種奇妙的魔法手段來確保(在特定事務中)如果您多次看到相同的數據庫記錄,您會看到相同的 Java 對象,這意味著如果(例如)您User從 中檢索 aUserRepository然後在Set<User>其他地方看到 a ,您在兩個地方都有相同的對象在這種情況下,Collection#remove會做你想做的。

MongoDB 支持不同:它只是將 POJO 映射為被動數據對象。這意味著除非您的實體類實現equalsand hashCode否則集合實現(和其他任何東西)不會認為它們相等。您需要removeIf根據 ID執行類似操作

(順便說一句,這就是為什麼您需要repo.save(changed)使用大多數存儲庫實現進行調用,即使您沒有專門使用 JPA。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

更新模型包含@DBRef [Spring-boot Angular]

在Spring的MongoDB中的@DBref列表项中查找/删除

MongoDB中的DBref

在 Spring 数据的 RepositoryRestResource 中急切地加载 MongoDB @DBRef

無法從文件夾中刪除文件

從 XML 文件中刪除塊

無法刪除或更新 Laravel 中的項目

Junit 5 mockito無法在spring boot應用程序中讀取用@Value註釋的屬性文件

無法在 python 中使用 os.remove() 從文件夾中刪除文件

如何從我的應用程序中刪除標題?為什麼顯示標題?

無法刪除 RSA Archer 中的訪問角色

無法從傳單地圖中刪除標記。不使用圖層

從鍊錶中刪除元素

我無法從反應功能組件中刪除列表

在我的 Spring Boot 應用程序中存儲日誌的最佳應用程序是什麼?

無法從 MainFrame(ttk.Frame) 類中關閉 tkinter 應用程序:

無法從列表中刪除當前項目,因為沒有當前項目

如何從 KDB 表中刪除/刪除列?

如何從共享中刪除值

在軸中找不到。我無法從我的熊貓數據框中刪除一列

PowerShell:從文件中刪除所有權限,包括。應用程序包

使用 LithnetRMA 從應用程序中刪除用戶

無法從通過 intellij 運行的 Spring Boot 應用程序連接到我在 docker 上運行的 kafka

從表中刪除項目反應

應用程序從 Android 中已刪除的數據庫文件中提供數據

從 ggtree 圖中刪除“a”

Spring Boot 應用程序中的 index.html 文件

想要從 len 中刪除 \n

用Java從數組中刪除元素