[英]Hibernate mappedby composite key
我想在@OneToMany中使用映射,但是會引發異常
org.hibernate.MappingException: Unable to read the mapped by attribute for moduleRoles in org.caau.entity.UserModuleRole!
這是我的實體映射。UserModuleRole是復合類。如果使用注釋代碼,程序是正確的。有人幫我解決嗎?
@Entity
@Table(name = "user")
public class User{
private long id;
private Set<UserModuleRole> moduleRoles;
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
return id;
}
@OneToMany(fetch = FetchType.EAGER,mappedBy="user")
//if use under code,program is correct,but i want to use mappedBy!
//@OneToMany(fetch = FetchType.EAGER)
//@JoinColumn(name = "user_id")
public Set<UserModuleRole> getModuleRoles() {
return moduleRoles;
}
}
這是類UserModuleRole
@Entity
@Table(name = "user_module_role")
@IdClass(UserModuleRolePK.class)
public class UserModuleRole{
private User user;
private ModuleRole moduleRole;
private long addUserId;
private Date addDate;
private long updateUserId;
private Date updateDate;
@Id
public User getUser() {
return user;
}
@Id
public ModuleRole getModuleRole() {
return moduleRole;
}
}
class UserModuleRolePK implements Serializable {
private static final long serialVersionUID = -9132981262254922539L;
private User user;
private ModuleRole moduleRole;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
public User getUser() {
return user;
}
@ManyToOne
@JoinColumns({ @JoinColumn(name = "module_id", nullable = false), @JoinColumn(name = "role_id", nullable = false) })
public ModuleRole getModuleRole() {
return moduleRole;
}
}
}
首先,您得到的異常是由於在UserModuleRole
類中沒有任何名為user
關系屬性。
您試圖實現的是實體User
和ModuleRole
之間的多對多關系,在您的示例中不需要中間類UserModuleRole
,因為它擁有的唯一字段/屬性是對其他兩個實體的外鍵引用。
除非您忘記為問題添加更多信息,否則應該使用的映射要簡單得多,如下所示:
@Entity
public class ModuleRole {
private Long id;
private Set<User> users;
@Id
@Column(name = "id")
public Long getId() {
return id;
}
@ManyToMany
@JoinTable(name = "user_module_role",
joinColumns = @JoinColumn(name = "module_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "user_id"), referencedColumnName = "id")
public Set<Users> getUsers() {
return users;
}
}
@Entity
@Table(name = "user")
public class User{
private Long id;
private Set<ModuleRole> moduleRoles;
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
return id;
}
@ManyToMany(mappedBy = "users")
public Set<ModuleRole> getModuleRoles() {
return moduleRoles;
}
}
Hibernate將自己處理中介表,除非您想向關系中添加其他字段,否則您不必擔心它,在這種情況下, 本教程會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.