2016-05-07 5 views
0

これまでのところ、私のアプリケーションでは、1人のマスターユーザーしかいません。しかし、私はそれを私のビュー層に表示しようとすると、それはそれが持っている役割の数によって乗算されます。Spring MVC - userProfilesを1人のユーザーに正しく割り当てる方法は?

マイUserエンティティ定義は次のとおりです。

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; 
} 

、テーブルユーザーにエントリが1つしかない場合(マスターユーザーの場合)、テーブルuser_profileには3つのエントリがあります(ADMIN、USER ND DBA)との両方をリンクテーブルuser_user_profileは、のような3つのエントリが、あります

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

を私はこの問題は、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>(); 

しかし、私はここで何が間違っているか見ることはできません。誰か助けてくれますか?

@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; 

必要として今では働いている:

答えて

0

は、私が問題だと思ったところに次の注釈を含めることによって、作業それを手に入れました。

関連する問題