[英]Strange feeling with my bi-directional JPA OneToMany mapping
我有兩個實體, User
和Role
,它們應在雙向的Role
與多個User
。
用戶類別:
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
...
@ManyToOne
private Role role;
...
public void setRole(Role role) {
this.role = role;
if (!role.getUsers().contains(this)) {
role.getUsers().add(this);
}
}
}
角色類:
@Entity
public class Role implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long roleId;
private String roleName;
@OneToMany(mappedBy = "role")
private List<User> users = new ArrayList<>();
...
public void addUser(User user) {
users.add(user);
if (user.getRole() != this) {
user.setRole(this);
}
}
最后,我嘗試通過以下方式在我的signUp方法中設置這些實體:
try {
em.persist(newUser);
} catch (Exception e) {
throw new Exception("Could not persist user.");
}
Role role = new Role();
role.setRoleName("user");
role.addUser(newUser);
try {
em.persist(role);
} catch (Exception e) {
throw new Exception("Could not persist role.");
}
到目前為止,一切都很好,並且沒有異常,但是不知何故,我感覺有些多余。 我想知道如果我在Role
的List<User>
中始終只存儲一個用戶,會發生什么情況? 或者我是偏執狂,並且此代碼很好?
似乎您正在為每個新用戶創建一個名稱為“ user”的新角色,而不是重用當前的“ user”角色。 每個“用戶”角色只有一個用戶。
您應該嘗試按名稱查找角色,而不是總是創建新的角色。
Role role = findRoleByName("user");
if (role == null) {
role = new Role();
role.setRoleName("user");
}
role.addUser(newUser);
try {
em.persist(role);
} catch (Exception e) {
throw new Exception("Could not persist role.");
}
User
可以有多個角色,一個Role
可以屬於多個用戶。 您需要在User
和Role
之間具有@ManyToMany
關聯。 Role
類似於參考值,因此不應存儲關聯用戶。
@Entity
@Table
public class User {
@Id
@GeneratedValue
private Long pid;
@ManyToMany(fetch = FetchType.LAZY)
private List<Role> roles;
}
@Entity
@Table
public class Role {
@Id
private Long pid;
@Column
private String name;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.