AnnotationException:使用@OneToMany或@ManyToMany定位未映射的类:

时间:2017-11-21 12:32:46

标签: java hibernate spring-boot enums javabeans

我有一个枚举如下:

public enum UserRole {
    ADMIN,ORGANIZER,USER
}

然后在另一个课程中,我正在尝试制作这个枚举的集合:

@Data
@Entity
public class User {

    @Id
    @GeneratedValue
    Long id;

    @OneToMany
    Collection<UserRole> userRole;

}

但它抱怨以下错误:

Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.eventer.demo.model.User.userRole[com.eventer.demo.model.UserRole]

2 个答案:

答案 0 :(得分:2)

您不能在非实体类上使用@OneToMany。您应该使用@ElementCollection,它可以用于String,Integer,Enum和其他没有主键的基本类型。

答案 1 :(得分:1)

您必须使用@ElementCollection,因为此用户角色是枚举,并且它不包含在数据库中。 JPA 2.0使用@ElementCollection:

使后一种情况变得简单
  

JPA 2.0定义了ElementCollection映射。它意味着处理   几个非标准的关系映射。 ElementCollection可以   用于定义与Embeddable对象的一对多关系,   或基本值(如字符串集合)。一个   ElementCollection还可以与Map结合使用来定义   关键字可以是任何类型的对象和值的关系   是一个Embeddable对象或Basic值。

    @ElementCollection(targetClass=UserRole.class)
    @Enumerated(EnumType.STRING)
    @CollectionTable(name = "USER_ROLE",
    joinColumns = @JoinColumn(name = "USER_ID"))
    @Column(name="ROLE")
    Collection<UserRole> roles;