我正试图使用java在表之间建立多对多关系,但遇到了一个问题。到目前为止,我设计它的方式是用户<->角色<->权限,除了role.java中的最后一个“referencedcolumnname=”privilege\u id“没有被识别,我的ide也没有对此字段给出任何建议之外,所有的表和列都被识别。我不确定这是否是我的项目的主要问题,但当用户尝试登录时,我确实遇到throwlazyinitializationexception。
用户.java
package com.lukas.ramonas.cms.Model;
import javax.persistence.*;
import java.util.Collection;
import java.util.List;
/*******************************************
* Defined user model
*******************************************/
@Entity
@Table(name = "user_table", schema = "public")
public class User {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int user_id;
private String name;
private String username;
private String password;
private String email;
private boolean confirmed;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(
name = "user_role_table",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "role_id"))
private Collection<Role> roles;
/*******************************************
* Setters and getters
*******************************************/
public Integer getId() {
return user_id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public void setConfirmed(Boolean confirmed) {
this.confirmed = confirmed;
}
public Boolean getConfirmed() {
return confirmed;
}
public void setRoles(Collection roles) {
this.roles = roles;
}
public Collection<Role> getRoles() { return this.roles;
}
}
角色.java
package com.lukas.ramonas.cms.Model;
import javax.persistence.*;
import java.util.Collection;
/*******************************************
* Defined role model
*******************************************/
@Entity
@Table(name = "role_table", schema = "public")
public class Role {
@Id
@Column(name = "role_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private int role_id;
private String name;
@ManyToMany(mappedBy = "roles")
private Collection<User> users;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(
name = "role_privilege_table",
joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "role_id"),
inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "privilege_id"))
private Collection<Privilege> privileges;
public String getName() {
return this.name;
}
public Collection<Privilege> getPrivileges() {
return this.privileges;
}
}
特权.java
package com.lukas.ramonas.cms.Model;
import javax.persistence.*;
import java.util.Collection;
/*******************************************
* Defined privilege model
*******************************************/
@Entity
public class Privilege {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int privilege_id;
private String name;
@ManyToMany(mappedBy = "privileges")
private Collection<Role> roles;
public String getName() {
return this.name;
}
}
任何建议都非常感谢,如果你需要任何额外的信息,我很乐意提供。
1条答案
按热度按时间hmmo2u0o1#
所以解决这个问题非常简单。在privilege.java类中,我忘记添加@table注解。我可以通过将@table(name=“privilege\u table”,schema=“public”)添加到我的类中来解决这个问题: