[英]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 中添加一個條目?
在做了一些閱讀和實驗之后,我發現以下工作:
OauthAttribute
class 中創建對用戶的引用,如下所示: @ManyToOne
@JoinColumn(name = "user_id")
@NotNull
lateinit var user: OauthUser
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.