假设有一个类如下所示:
@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被定义为一个List,它没有add方法。当我试图将它转换为ArrayList时,我得到了以下错误:java.lang.ClassCastException: class org.hibernate.collection.internal.PersistentBag cannot be cast to class java.util.ArrayList
.
我该如何着手在那个列表中添加条目呢?
1条答案
按热度按时间ie3xauqp1#
在做了一些阅读和实验后,我发现下面的作品:
1.在
OauthAttribute
类中创建对用户的引用,如下所示:1.调整
OauthUser
类中的oauthAttributes
集合定义,从到
这将在oauth_attribute表中创建一个
user_id
外键引用,而不是一个单独的连接表。现在可以创建OauthAttribute
类的新示例,并通过指定将user
类属性分配给相应的用户来将它们分配给用户。我欢迎任何意见,以防解决方案不是最佳的。而且,我相信这个问题仍然代表着许多对许多的关系。