これまでのところ、私のアプリケーションでは、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;
必要として今では働いている: