簡體   English   中英

如何在 Springboot 中向實體集合添加新條目

[英]How to add new entries to an entity's collection in Springboot

假設有一個 class 如下:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
class OauthUser(
    @OneToMany(cascade = [CascadeType.ALL], fetch = FetchType.EAGER)
    var oauthAttributes: List<OauthAttribute>,

    @NotNull
    @Column(unique = true)
    var email: String,
    var firstName: String,
    var lastName: String
) : OAuth2User {

    @Id
    @NotNull
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    var id: Long? = null

}

我正在嘗試在用戶首次登錄后再次登錄時添加新的oauthAttributes條目,以便如果有更新的屬性,則會創建一個新屬性以保留配置文件更改的歷史記錄。

我無法userRepository.findByEmail(email).oauthAttributes.add(newEntry)因為 oauthAttributes 被定義為一個列表,它沒有添加方法。 當我嘗試將其轉換為 ArrayList 時出現以下錯誤: java.lang.ClassCastException: class org.hibernate.collection.internal.PersistentBag cannot be cast to class java.util.ArrayList

我怎樣才能 go 在那個 lits 中添加一個條目?

在做了一些閱讀和實驗之后,我發現以下工作:

  1. OauthAttribute class 中創建對用戶的引用,如下所示:
    @ManyToOne
    @JoinColumn(name = "user_id")
    @NotNull
    lateinit var user: OauthUser
  1. 調整OauthUser class 中的oauthAttributes集合定義,從
    @OneToMany(cascade = [CascadeType.ALL], fetch = FetchType.EAGER)
    var oauthAttributes: List<OauthAttribute>,

    @OneToMany(cascade = [CascadeType.ALL], fetch = FetchType.EAGER, mappedBy = "user")
    var oauthAttributes: List<OauthAttribute>?

這將在 oauth_attribute 表中創建一個user_id外鍵引用,而不是單獨的連接表。 現在可以簡單地創建OauthAttribute class 的新實例並將它們分配給用戶,方法是簡單地指定將user class 屬性分配給相應的用戶。

如果解決方案不是最佳的,我歡迎任何評論。 另外,我相信這個問題仍然代表多對多關系。

暫無
暫無

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

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