ユーザーが働く組織ごとに異なるロールをユーザーに割り当てたいと思います。別の SO questionからエンティティ GrantedRole のアイデアを得ました。
ただし、単体テストを実行しようとすると、Hibernate がエンティティ ロールを見つけられないため、アプリケーション コンテキストの読み込みにすべて失敗します。GrantedRole が persistence.xml に追加されました。私が得るエラーは次のとおりです。
org.hibernate.AnnotationException: com.onior.modm.registration.domain.GrantedRole.role の @OneToOne または @ManyToOne が不明なエンティティを参照しています: com.onior.modm.registration.domain.GrantedRole$Role
GrantedRole.Role を persistence.xml に追加すると、次のようになります。
javax.persistence.PersistenceException: [PersistenceUnit: modm-persistence] クラスまたはパッケージが見つかりません
原因: java.lang.ClassNotFoundException: com.onior.modm.registration.domain.GrantedRole.Role
GrantedRole の私のコードでは、セッターを省略しました。DomainEntity は、すべてのエンティティのスーパークラスです。
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import org.springframework.security.core.GrantedAuthority;
@SuppressWarnings("serial")
@Entity
@Table(name = "role_assignments", uniqueConstraints = @UniqueConstraint(columnNames = {
"user", "organization"}))
public class GrantedRole extends DomainEntity implements GrantedAuthority {
private User user;
private Role role;
private Organization organization;
public enum Role {
USER, ORGADMIN, ADMIN
}
public GrantedRole() {
super();
}
public GrantedRole(User user, Role role, Organization organization) {
super();
this.user = user;
this.role = role;
this.organization = organization;
}
@ManyToOne
@NotNull
public User getUser() {
return user;
}
@ManyToOne
@NotNull
@Enumerated(EnumType.STRING)
public Role getRole() {
return role;
}
これを解決するにはどうすればよいですか? Role を enum として保持するか、少なくとも enum にしないことをお勧めします。