【发布时间】:2020-02-11 16:37:27
【问题描述】:
我开始学习 Hibernate 和 Spring JPA 并尝试连接两个表但无法使其正常工作。 这是我的课程:
@Entity
@Table(name = "users")
public class User {
@OneToMany( fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="username", referencedColumnName="username")
List<UserRole> userRoles;
private String email;
private String name;
private String password;
private String grp;
@Id
private String username;
public User() {
userRoles=new ArrayList<>();
userRoles.add(new UserRole("default"));
}
@Entity
@Table(name = "roles")
public class UserRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "role_name")
String roleName;
@Override
public String toString() {
return roleName;
}
public UserRole(String role) {
roleName = role;
}
我遇到的问题是当我使用 JpaRepository 的保存方法来更新用户时,角色值在角色表中重复。 例如,如果我有一个具有 ADMIN ROLE 的用户并使用 save 首先将用户添加到表中,然后更新他的电子邮件,我将得到两个具有不同 ID 的相同角色字段。(如果我将可空标记设置为 false) 否则,它只会给我一个新字段,其中 null 作为用户名、ADMIN 角色和新 ID。 我知道它可能连接到 generationType.IDENTITY。但是,如果我将其设为 AUTO,则会得到 Table 'project2testing.hibernate_sequence' 异常。 你能帮我弄清楚我做错了什么吗? 谢谢!
【问题讨论】: