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

例外があなたに伝えていることは明らかです - yout@OneToManyコレクションは具象型 ( Set<AnotherEntity>)を指定するか、@OneToMany(targetEntity=AnotherEntity.class)

于 2011-08-04T08:31:01.930 に答える
3

Use Java 5 Syntax が正しい答えです... しかし、それは非常に誤解を招くものです。Java 5+ 構文を使用する必要があります.. Java 5 を使用することを考えている人.

于 2016-09-29T12:44:28.113 に答える
3

必要な方へ。私が覚えている限りでは、Java EE 5 では、Java Enterprise Edition に多くの機能が追加されました。特に、アノテーションとジェネリックの使用がそうです。そのため、Hibernate でエンティティを生成するときに、Eclipse で「Use Java 5 Syntax」をチェックするか、Netbeans で「Java 5 Compatibility」(UI の正確な用語がわからない) をチェックすると、生成されたコードが確実に取得されるようになります。 Java 5 のこれらの「新機能」がカウントされます。

評判が42しかないので、コメントできません!!!

于 2016-06-30T14:11:20.080 に答える
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 に答える