問題

Hibernate開発では、アノテーションを使用して1対多の関係を定義しました。

package com.mkyong.user.model;

@Entity
@Table(name = "USER", schema = "MKYONG")
public class User implements java.io.Serializable {

    private Set address = new HashSet(0);
   //...

    @OneToMany(orphanRemoval=true,
    cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
    public Set getAddress() {
        return this.address;
    }

}

しかし、それは例外を除いてヒットします:

Initial SessionFactory creation failed. org.hibernate.AnnotationException:
Collection has neither generic type or OneToMany.targetEntity() defined: com.mkyong.user.model.user

解決策

Hibernateはリンクする “クラス”を知らないので、クラス “User”は生の型コレクション ”

Set address

“を持ち、Hibernateはこれをサポートしません。

例えば、

  1. アドレスを設定します. //Setは生の型ですが、Hibernateは例外を返します.

  2. <アドレス>アドレスを設定します. //HibernateはSet Set Addressクラスを知っています.

ですから、あなたのクラスは次のように変更する必要があります:

package com.mkyong.user.model;

@Entity
@Table(name = "USER", schema = "MKYONG")
public class User implements java.io.Serializable {

    private Set<Address> address = new HashSet<Address>(0);
   //...

    @OneToMany(orphanRemoval=true,
    cascade=CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
    public Set<Address> getAddress() {
        return this.address;
    }

}