gpt4 book ai didi

java - sql中未使用JoinColumn名称

转载 作者:行者123 更新时间:2023-12-01 05:56:45 26 4
gpt4 key购买 nike

我在映射多对一关系时遇到问题,而数据库中没有设置精确的外键约束。我将 OpenJPA 实现与 MySql 数据库结合使用,但问题在于为 insert 和 select 语句生成的 sql 脚本。

我有 LegalEntity 表,其中包含 RootId 列(等等)。我还有一个 Address 表,其中包含不可为空的 LegalEntityId 列,并且应包含引用 LegalEntity 的“RootId”列的值,但没有设置任何数据库约束(外键)。

地址实体已映射:


@Entity
@Table(name="address")
public class Address implements Serializable {
...

@ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumn(referencedColumnName="RootId", name="LegalEntityId", nullable=false, insertable=true, updatable=true, table="LegalEntity")
public LegalEntity getLegalEntity() {
return this.legalEntity;
}
}

生成 SELECT 语句(获取 LegalEntity 的地址时)和 INSERT 语句:

SELECT t0.Id, .., t0.LEGALENTITY_ID FROM address t0 WHERE t0.LEGALENTITY_ID = ? ORDER BY t0.Id DESC [params=(int) 2]

INSERT INTO address (..., LEGALENTITY_ID) VALUES (..., ?) [params=..., (int) 2]

如果我从生成的上述语句中省略表属性:

SELECT t0.Id, ... FROM address t0 INNER JOIN legalentity t1 ON t0.LegalEntityId = t1.RootId WHERE t1.Id = ? ORDER BY t0.Id DESC [params=(int) 2]

INSERT INTO address (...) VALUES (...) [params=...]

因此,LegalEntityId 不包含在任何语句中。

是否可以建立基于这种引用的关系(与主键以外的列,数据库中没有外键)?还缺什么吗?

提前致谢。

最佳答案

尝试将 FetchType 更改为 eager。在通过调用 getLegalEntity 请求之前,OpenJPA 不应查询 LegalEntity。

此外,没有约束并不重要(如果我错了,请有人纠正我)。

关于java - sql中未使用JoinColumn名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2729168/

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