[英]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.