11

我使用Hibernate Tools来生成我的 Hibernate POJO 映射。

不幸的是,Hibernate 工具生成的代码似乎不起作用,我得到了异常

org.hibernate.AnnotationException:集合既没有泛型类型也没有 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;
    }

}  

根据这个帖子

http://www.mkyong.com/hibernate/org-hibernate-annotationexception-collection-has-neither-generic-type-or-onetomany-targetentity/comment-page-1/#comment-67404

和这篇文章

http://www.mkyong.com/hibernate/hibernate-error-collection-has-neither-generic-type-or-onetomany-targetentity/

您必须自己手动更改 Hibernates 生成的代码。

这是我想避免的一件事。任何想法可能是什么问题?

问候

JS

4

6 回答 6

15

我为我找到了一个可行的解决方案。

只需选中随附的屏幕截图中描述的“使用 Java 5 语法” ,Hibernate 工具就会为集合生成正确的泛型类型。

在此处输入图像描述

于 2011-08-05T13:41:14.403 回答
11

异常告诉你的很清楚——你的@OneToMany集合应该指定一个具体的类型(Set<AnotherEntity>)或者有@OneToMany(targetEntity=AnotherEntity.class)

于 2011-08-04T08:31:01.930 回答
3

对于那些需要的人。据我所知,在 Java EE 5 中,Java 企业版获得了很多功能,尤其是在使用注解和泛型方面。所以这就是为什么我认为在使用 Hibernate 生成实体时,在 Eclipse 上检查“使用 Java 5 语法”或在 Netbeans 上检查“Java 5 兼容性”(不确定 UI 上的确切术语),将确保生成的代码将占用Java 5 的那些“新功能”数不胜数。

因为我只有 42 名声望,所以我无法发表评论!!!

于 2016-06-30T14:11:20.080 回答
3

使用 Java 5 语法是正确的答案......但它非常具有误导性。应该是使用 Java 5+ 语法.. 谁会想使用 java 5。

于 2016-09-29T12:44:28.113 回答
1

搜索“Red Hat hbm2java docs”,因为链接已损坏。额外的奖励,所以你不必搜索。选中这两个复选框以“现代化”生成的 Java。不幸的是,复选框的标签并不能说明如果您选中它们会发生什么。有人会认为“使用 Java 5 语法”有很多含义,并且由于默认情况下它是关闭的,因此它不是所需/典型的行为。

务必选中两个框以使用注释和泛型。然后告诉 Eclipse 在“清理”选项下生成串行版本 UID。我花了 3 天时间才弄清楚这一切。

于 2014-09-11T19:09:46.610 回答
0

为了在自动构建中使用 java 5 泛型,您可以修改参数以启用 jdk5,如下所示:

<hbm2java jdk5="true">

此信息记录在此处:Red Hat hbm2java docs

于 2013-07-05T14:14:44.410 回答