小编典典

“非法尝试将非集合映射为@ OneToMany,@ ManyToMany或@CollectionOfElements”

hibernate

我有一个问题,它给我错误:

无法创建sessionFactory object.org.hibernate.AnnotationException:非法尝试将非集合映射为@
OneToMany,@
ManyToMany或@CollectionOfElements:nl.scalda.pasimo.model.employeemanagement.EducationTeam.coachGroups

你知道为什么吗?

@OneToMany(cascade=CascadeType.ALL, targetEntity=CoachGroup.class)
@JoinColumn(name="id")
private TreeSet<CoachGroup> coachGroups = new TreeSet<>();
private SessionFactory factory;

private void initialiseFactory() {
    try {
        factory = new Configuration().configure().buildSessionFactory();
    } catch (Throwable ex) {
        System.err.println("Failed to create sessionFactory object." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

阅读 258

收藏
2020-06-20

共1个答案

小编典典

异常很简单,它说: 非法尝试将非集合映射为@ OneToMany,@ ManyToMany或@CollectionOfElements
,因此原因很明显,如果我们看一下Hibernate Collection映射
文档,
它会明确指出:

根据要求,必须将持久的集合值字段声明为接口类型(请参见示例7.2,“使用@OneToMany和@JoinColumn的集合映射”)。实际的界面可能是java.util.Setjava.util.Collectionjava.util.Listjava.util.Mapjava.util.SortedSetjava.util.SortedMap

而你使用
TreeSet的

是一个实现
的都Set<E>SortedSet<E>接口。因此,您的实际映射无法使用TreeSet,您应该使用Set<CoachGroup>而不是TreeSet<CoachGroup>

private Set<CoachGroup> coachGroups = new HashSet<CoachGroup>();
2020-06-20