おはようStackoverflow、
エラーが発生するという問題があります:
SessionFactoryオブジェクトの作成に失敗しました。
なぜなのかご存知ですか?
@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としてマップしようとする違法な試みです。そのため、ここで、また HibernateCollection mappingdocumentation それは明確に次のように述べています:
要件として、永続的なコレクション値フィールドはインターフェイスタイプとして宣言する必要があります(例7.2「@OneToManyおよび@JoinColumnを使用したコレクションマッピング」を参照)。実際のインターフェイスは、
Java.util.Set
、Java.util.Collection
、Java.util.List
、Java.util.Map
、Java.util.SortedSet
、Java.util.SortedMap
...のようになります。
そして、 TreeSet を使用しました。これは実装ですclassSet<E>
およびSortedSet<E>
インターフェイスの両方。したがって、実際のマッピングはTreeSet
では機能しません。Set<CoachGroup>
ではなくTreeSet<CoachGroup>
を使用する必要があります。
private Set<CoachGroup> coachGroups = new HashSet<CoachGroup>();
実装ではなく、インターフェイスにマップする必要があります。この:
@OneToMany(cascade=CascadeType.ALL, targetEntity=CoachGroup.class)
@JoinColumn(name="id")
private TreeSet<CoachGroup> coachGroups = new TreeSet<>();
はずです(HashSetで十分なので、TreeSetも置き換えられます)。
@OneToMany(cascade=CascadeType.ALL, targetEntity=CoachGroup.class)
@JoinColumn(name="id")
private Set<CoachGroup> coachGroups = new HashSet<>();
エンティティフィールド宣言で具体的な実装を使用することはできません。次のいずれかを使用できます。
したがって、あなたの場合は次のようにする必要があります。
@OneToMany(cascade=CascadeType.ALL, targetEntity=CoachGroup.class)
@JoinColumn(name="id")
private Set<CoachGroup> coachGroups = new TreeSet<>();
コレクションフィールドを具象クラスとして保存することはできません。
これを得ました、
要件として、永続的なコレクション値フィールドはインターフェイスタイプとして宣言する必要があります(例7.2「@OneToManyおよび@JoinColumnを使用したコレクションマッピング」を参照)。実際のインターフェースは、Java.util.Set、Java.util.Collection、Java.util.List、Java.util.Map、Java.util.SortedSet、Java.util.SortedMap、または好きなもの(「好きなもの」)です。 org.hibernate.usertype.UserCollectionTypeの実装を記述する必要があることを意味します。
第7章コレクションマッピング から。
以下のコードを使用して、ソートされたセットを保存できます(コメントをよく読んでください):
@OneToMany(cascade=CascadeType.ALL) //Removed targetEntity, as you are already using generics.
@JoinColumn(name="team_id") // Use this name as to show the presence of foreign key of EducationTeam in CoachGroup.
@SortNatural // Make sure that your CoachGroup Entity has implemented Comparable<CoachGroup> interface which wii be used while sorting.
private SortedSet<CoachGroup> coachGroups = new TreeSet<>();