早上好Stackoverflow,
我有一个问题,它给我错误:
无法创建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); } }
异常很简单,它说: 非法尝试将非集合映射为@ OneToMany,@ ManyToMany或@CollectionOfElements ,因此原因很明显,如果我们查看Hibernate Collection映射 文档,它会明确指出:
根据要求,必须将持久性集合值字段声明为接口类型(请参见示例7.2,“使用@OneToMany和@JoinColumn的集合映射”)。实际的界面可能是java.util.Set,java.util.Collection,java.util.List,java.util.Map,java.util.SortedSet,java.util.SortedMap…
java.util.Set
java.util.Collection
java.util.List
java.util.Map
java.util.SortedSet
java.util.SortedMap
而你使用 TreeSet的 是一个实现 类 的都Set<E>和SortedSet<E>接口。因此,您的实际映射无法使用TreeSet,您应该使用Set<CoachGroup>而不是TreeSet<CoachGroup>:
Set<E>
SortedSet<E>
TreeSet
Set<CoachGroup>
TreeSet<CoachGroup>
private Set<CoachGroup> coachGroups = new HashSet<CoachGroup>();