gpt4 book ai didi

java - @JoinTable 使用导入键代替主键

转载 作者:行者123 更新时间:2023-11-29 09:13:29 25 4
gpt4 key购买 nike

使用 JPA/Hibernate 3.6/DB2。

我有以下异常:Caused by: 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

最佳答案

如果您阅读 JPA Documentation on @JoinTable ,您将看到 joinColumns 的说明和 inverseJoinColumns提及:

The foreign key columns of the join table which reference the primary table of the entity...

我想这足以理解约束。

关于java - @JoinTable 使用导入键代替主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com