我有一个问题,它给我错误:
无法创建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
…
而你使用
TreeSet的
是一个实现 类
的都Set<E>
和SortedSet<E>
接口。因此,您的实际映射无法使用TreeSet
,您应该使用Set<CoachGroup>
而不是TreeSet<CoachGroup>
:
private Set<CoachGroup> coachGroups = new HashSet<CoachGroup>();
我有三个名称为depense、benifice和categories的实体,当我想在category实体中获取beneice_c和Depenese_C时。我会看到这个错误 依赖实体 Benfice实体 Categorie entite>公共类Categories实现Serializable{
问题内容: 我尝试注释属性访问器,其返回值是一个映射,如下所示: 这符合hibernate用户指南(第2.2.5.3.4。节)。但是,我得到: 问题答案: 查看主题6.1。在此链接上的永久性收藏。 通过链接,Hibernate要求将集合值持久化字段声明为接口类型。实际的接口可能是或任何您喜欢的接口(“您喜欢的任何东西”意味着您将不得不编写org.hibernate.usertype.UserCol
问题内容: 我正在尝试跟随hql查询执行 但它显示 问题答案: 是一个。因此,它没有名为的属性。 是this 元素 的一个属性。 您可以通过 加入 集合 而不是取消引用 来解决此问题:
你可以定义一个新的名或从下拉式菜单中选择导入到现有的表或集合。 【注意】如果你在“目标表”或“目标集合”输入一个新的名,在“是新的”内的框将会自动显示为“是”。 导入多个表或集合时,所有表或集合会显示在列表中。
问题内容: 我正在使用“hibernate注释”找到我的脚,并且遇到了一个问题,希望有人可以提供帮助。 我有2个实体,分别是Section和ScopeTopic。该部分具有List类成员,因此具有一对多关系。运行单元测试时,出现此异常: 使用@OneToMany或@ManyToMany定位未映射的类:com.xxx.domain.Section.scopeTopic [com.xxx.domain