0

MSSQL Server 2012 の注文テーブルをマップする Entity-Bean を作成しました。これまでのところ問題なく動作していますが、Article-View のいくつかの列を結合して、選択した記事の詳細情報を提供したいと考えています。

注文は、その ID を Prime-Key とし、Article-Nr を Foreign-Key とする複数の行で構成されます。

記事を含むビューを Article-Entity にマップしようとしましたが、行数が多い (>10.000) ため、すべてが遅くなります (ただし、正常に機能します... 信じられないほど遅いです... 他に必要はありません。このビューをさらにマップします - 3 行の情報を除きます)。したがって、必要な列を Order-Entity に結合したいと思います。

しかし、私はそれを機能させません...

アノテーション「NamedQuery」で試してみました

@Entity
@NamedNativeQuery(name = "Joinnecessary", 
query = "SELECT Order.PK_ID, Order.FK_OrderID, Order.FK_ArticleNr, Order.Amount,
Article.Description, Article.Price 
FROM Order left outer join Article 
on Order.FK_ArticleNr=Article.PK_ArticleNr",
resultClass = Order.class)

問題がどこにあるのか正確にはわかりません...私のレコードエンティティには注文エンティティのリストがあり、それらを表示します。

for(orders o: orderlist){

この行で、次のエラーが発生します。

SEVERE: オブジェクト名 'Order' が無効です。スレッド「メイン」org.hibernate.exception.SQLGrammarException での例外: コレクションを初期化できませんでした: [qohelet.Record.orders#1] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)

文献で、1:1 の関係をマッピングするのに興味深いものを見つけました。(この観点から、私の関係はそのようなものと見なすことができます) @SecondaryTable-Annotation が見つかった場合、これはすべての問題の優れた解決策になる可能性があります。

@Table(name = "Order")
@SecondaryTable(name = "Article", pkJoinColumns = {
    @PrimaryKeyJoinColumn(name = "PK_ArticleNr", referencedColumnName = "FK_ArticleNr")
})

私が参加する他の列は次のようになります。

@Column(table = "Article")
private String description;

しかし、注釈「PrimaryKeyJoinColumn」は理由もなくそのように命名されていないと思います...

最初の SessionFactory の作成に失敗しました。org.hibernate.AnnotationException: SecondaryTable JoinColumn は非主キーを参照できません

スレッド "main" での java.lang.ExceptionInInitializerErrorException

私が取得したい効果を持つ別の注釈はありますか? または、現在のものを間違って使用していますか?ありがとう!

4

1 に答える 1