@JoinTable使用Imported Key而不是主键

时间:2012-06-13 06:49:17

标签: java hibernate jpa annotations jointable

使用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必须使用主键?我的意思是,我不是只是定义这是一个多对一的关联吗? 为什么它必须是主键?

指定:这就是表格的样子。

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

1 个答案:

答案 0 :(得分:0)

如果您阅读JPA Documentation on @JoinTable,则会看到joinColumnsinverseJoinColumns提及的说明:

  

引用主要表的连接表的外键列   实体表......

我想这足以理解约束。