0

ユーザーが働く組織ごとに異なるロールをユーザーに割り当てたいと思います。別の 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 にしないことをお勧めします。

4

1 に答える 1