8

次の Hibernate Exception を受け取ります。

org.hibernate.AnnotationException: @OneToOne or @ManyToOne on cz.rohan.dusps.model.Switchport.konfiguracniTemplateAccess references an unknown entity: cz.rohan.dusps.model.KonfiguracniTemplate
    org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:103)
    org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
    org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
    org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
    org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
    org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
    cz.rohan.dusps.helper.SessionFactoryHelper.initFactory(SessionFactoryHelper.java:122)
    cz.rohan.dusps.helper.SessionFactoryHelper.getSessionFactory(SessionFactoryHelper.java:134)
    cz.rohan.dusps.filter.HistorieZmenFilter.doFilter(HistorieZmenFilter.java:102)
    cz.rohan.dusps.filter.CharsetFilter.doFilter(CharsetFilter.java:41)

さまざまな人々との問題に 20 時間ほど費やした後、考えられるすべてのブログやフォーラムを読んだ後、私はここで本当に必死になっています。

これは中規模のプロジェクトです。データベースは Postgres 9.1 であり、モデリング ツールを使用して DB を生成します。Hibernate はデータベースに接続しますが、データベースを生成しません。

データベースに新しいエンティティを作成しました。これは「KonfiguracniTemplate」(構成テンプレート) と呼ばれます。モデル、コントローラー、フォーム、バリデーター、.jsp を作成しましたが、基本的にはすべて、類似した性質の既存のエンティティーから 1:1 でコピーしました。KonfiguracniTemplate を使用できるようになりました。CRUD は完全に機能しています。

この KonfiguracniTemplate を Switchport というエンティティから参照すると、問題が発生します。DB には、2 つの関係があります。

  • Switchport 1:1 ... 0:N KonfigracniTemplate (switchport は常に KonfigracniTemplate を参照します。KonfiguracniTemplate は 0 回以上参照される場合があります)
  • Switchport には、この関係の FK konfiguracniTemplateAccess_id があります。

.../model/Switchport.java では、動作している他のすべての関係と同じように関係がマップされます。

@ManyToOne
@JoinColumn(nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;

私はさまざまな形式を試しました:

@ManyToOne
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;

また

@ManyToOne(targetEntity=KonfiguracniTemplate.class)
@JoinColumn(name="konfiguracnitemplateaccess_id", nullable = false)
private KonfiguracniTemplate konfiguracniTemplateAccess;

私もチェックしました:

  • 両方のエンティティが同じパッケージに含まれています
  • どちらも「import javax.persistence.Entity;」を使用して「@Entity」アノテーションが付けられています。
  • ビルドはエラー/警告メッセージを生成しません
  • Switchport の参照がコメントアウトされている限り、すべて問題ありません

何を試しても、「不明なエンティティを参照しています」という例外を取り除くことはできません。誰かが何が起こっているのか、または問題をデバッグする方法を共有できますか? 投稿の上部にあるスタック トレースだけがログに記録されます。

すべての入力は大歓迎です!

4

9 に答える 9

2

可能な解決策:

1) エンティティが hibernate.cfg.xml で適切に参照されていることを確認します

<hibernate-configuration>
<session-factory>
    ... 
    <mapping class="com.project.entitytwo.model.EntityTwo"/>
    ...
</session-factory>

2) @Entity がクラス レベル (クラスの上部) で指定されていることを確認します。

@Entity
@Table( name="ENTITY_TWO" )
public class EntityTwo extends AnyClass
{
    ...
于 2014-06-27T13:32:30.627 に答える
1

hibernate.cfg.xmlファイルを使用せずにSpringを使用すると、この問題に遭遇しました。ModelクラスのsetPackagesToScanメソッドにクラスの完全修飾パッケージ名を追加することで解決しましたLocalSessionFactoryBean

于 2015-12-15T18:10:20.493 に答える
1

最後に、チームの別の開発者からソリューションを入手しました!

SessionFactory オブジェクトを作成する前に、クラスをインポートする必要があります。ここでは、新しいクラスのインポートが欠落していたため、SessionFactory オブジェクトには不明でした。

とにかく、ヒントをくれてありがとう!

于 2011-09-09T09:05:48.447 に答える
0

同じ例外がありました...マスタークラス(主キーを持つクラス)に注釈( @Entity、および)を追加するのを忘れただけです@Table

したがって、解決策は、エンティティ内のすべての注釈を再確認することです。つまり、私がしたようにだけ@ManyToOneではありません@OneToMany

于 2014-12-06T21:51:23.033 に答える