【问题标题】:Spring MVC - how to correctly assign userProfiles to a single user?Spring MVC - 如何正确地将 userProfiles 分配给单个用户?
【发布时间】:2016-05-07 19:24:38
【问题描述】:

到目前为止,在我的应用程序中,我只有一个主用户。但是当我尝试在我的视图层上显示它时,它会乘以它拥有的角色数量。

我的用户实体定义是:

public class User {

@NotEmpty
@Column(name="sso_id", unique=true, nullable=false)
private String ssoId;

@NotEmpty
@Column(name="password", nullable=false)
private String password;

@NotEmpty
@Column(name="first_name", nullable=false)
private String firstName;

@NotEmpty
@Column(name="last_name", nullable=false)
private String lastName;

@Column(name="email", nullable=false)
private String email;

@NotEmpty
@Column(name="state", nullable=false)
private String state=State.ACTIVE.getState();

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_user_profile", 
        joinColumns = { @JoinColumn(name = "id_user", referencedColumnName="id") },
        inverseJoinColumns = { @JoinColumn(name = "id_profile", referencedColumnName="id") })
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<UserProfile> userProfiles = new HashSet<UserProfile>();

// getters and setters

UserProfile 实体定义为:

public class UserProfile {

@Column(name="type", length=15, unique=true, nullable=false)
private String type = UserProfileType.USER.getUserProfileType();

// getters and setters

UserProfileType 枚举定义为:

public enum UserProfileType {

USER("USER"),
DBA("DBA"),
ADMIN("ADMIN");

String type;

private UserProfileType(String userProfileType) {
    this.type = userProfileType;
}

public String getUserProfileType() {
    return type;
}

在我的数据库中,表 user 只有一个条目(用于主用户),表 user_profile 有 3 个条目(ADMIN、USER 和 DBA),而链接两者的表 user_user_profile 有 3 个条目,例如:

 id_user(master) id_profile(admin)
 id_user(master) id_profile(dba)
 id_user(master) id_profile(user)

我确实认为问题出在用户实体上,更准确地说是在以下摘录中:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_user_profile", 
        joinColumns = { @JoinColumn(name = "id_user", referencedColumnName="id") },
        inverseJoinColumns = { @JoinColumn(name = "id_profile", referencedColumnName="id") })
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private Set<UserProfile> userProfiles = new HashSet<UserProfile>();

但我看不出这里有什么问题。有人可以帮我吗?

【问题讨论】:

    标签: spring hibernate annotations


    【解决方案1】:

    通过在我认为有问题的地方添加以下注释来解决问题:

    @ManyToMany(fetch = FetchType.EAGER)
    @Fetch(FetchMode.SELECT)
    @JoinTable(name = "hrm_user_user_profile", 
            joinColumns = { @JoinColumn(name = "id_user", referencedColumnName="id") },
            inverseJoinColumns = { @JoinColumn(name = "id_profile", referencedColumnName="id") })
    @Cascade(org.hibernate.annotations.CascadeType.ALL)
    private Set<UserProfile> userProfiles;
    

    现在它可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2012-10-09
      • 2022-01-15
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多