我使用 Hibernate Tools 来生成我的Hibernate POJO映射。
不幸的是,Hibernate工具生成的代码似乎不起作用,我得到了异常
org.hibernate.AnnotationException:Collection既没有泛型类型,也没有OneToMany.targetEntity()
生成异常的代码部分是
/**
* ClassFlag generated by hbm2java
*/
@Entity
@Table(name = "class_flag", catalog = "incbszdb")
public class ClassFlag implements java.io.Serializable {
....
/* HERE */
private Set classFlagI18ns = new HashSet(0);
/* HERE */
public void setClassFlagI18ns(Set classFlagI18ns) {
this.classFlagI18ns = classFlagI18ns;
}
}
根据这篇文章
和这篇文章
您必须亲自更改Hibernates生成的代码。
这是我想避免的一件事。任何想法可能是什么问题?
此致
JS
答案 0 :(得分:13)
我找到了一个有效的解决方案。
只需检查“使用Java 5语法”,如附带的屏幕截图所示 Hibernate Tools为集合生成正确的泛型类型。
答案 1 :(得分:8)
例外告诉你的是明确的 - 你@OneToMany
集合应指定具体类型(Set<AnotherEntity>
)或@OneToMany(targetEntity=AnotherEntity.class)
答案 2 :(得分:2)
使用Java 5语法是正确的答案......但这是非常误导的。应该使用Java 5+语法..谁会想到使用java 5.
答案 3 :(得分:1)
搜索“Red Hat hbm2java docs”,因为链接已损坏。 添加奖金,因此您无需搜索。选中这两个复选框以“生成”生成的Java。不幸的是,复选框的标签并不表示如果检查它们会发生什么。有人会认为“使用Java 5语法”有很多含义,因为默认情况下它不是理想的/典型行为。
一定要检查两个框以使用注释和泛型。然后告诉Eclipse在“清理”选项下生成串行版本UID。花了3天的时间来解决这一切。
答案 4 :(得分:1)
对于那些需要的人。据我所知,在Java EE 5中,Java Enterprise Edition具有很多功能,特别是在使用注释和泛型时。所以这就是为什么我认为在Eclipse上检查“使用Java 5语法”,或者在Netbeans上的“Java 5兼容性”(不确定UI上的确切术语),在生成Hibernate实体时,将确保生成的代码将采取Java 5的那些“新功能”计数。
因为我的名声只有42,所以我无法发表评论!!!
答案 5 :(得分:0)