2

JPA/Hibernate 3.6/DB2 を使用。

次の例外があります: 原因: org.hibernate.AnnotationException: SecondaryTable JoinColumn は非主キーを参照できません

のせいで:

public class XRequest {
  @ManyToOne
  @JoinTable(
    name = "RequestBatch",
    joinColumns = @JoinColumn(name = "requestBatchID", referencedColumnName="requestBatchID"),
    inverseJoinColumns = @JoinColumn(name = "requestVersionID")
  )
  private Requestversion requestversion;
}

requestBatchID は主キーではなく、RequestBatch テーブルからインポートされたキーです (実際には主キーです)。JoinTable で主キーを使用する必要があるのはなぜですか? つまり、これが多対 1 の関連付けであると定義しただけではありませんか? なぜ主キーでなければならないのですか?

指定するには: これは、テーブルがどのように見えるかです。

XRequest (
requestId int (primary)
requestBatchId int (imported key from RequestBatch)
)

RequestBatch (
requestBatchId int (primary)
requestVersionId int 
)

RequestVersion (
requestVersionId int (primary)
)

必要な結果は、Hibernate によって構築される次の SQL クエリです。

select xr, rv 
from XRequest xr
left outer join RequestBatch rb on rb.requestBatchId = xr.requestBatchId 
inner join RequestVersion rv on rb.requestVersionId = rv.requestVersionId
4

1 に答える 1

0

@JoinTable に関する JPA ドキュメントを読むと、 joinColumnsおよびinverseJoinColumnsに関する説明が表示されます。

エンティティの主テーブルを参照する結合テーブルの外部キー列...

制約を理解するにはそれで十分だと思います。

于 2012-06-13T07:09:05.547 に答える