我有一个枚举如下:
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]
答案 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;