hibernate - JPA @ManyToOne 连接列名时的场景在两个表中是相同的
问题描述
当实体关系之间的列同名时,@JoinColumn 配置应该是什么?
例如,使用下面的两个表:
create table DOG
(
DOG_ID NUMBER generated as identity primary key,
NAME VARCHAR2(50) not null,
OWNER_ID NUMBER constraint FK_OWNER_ID references OWNER
)
create table OWNER
(
OWNER_ID NUMBER generated as identity primary key,
FIRST_NAME VARCHAR2(50) not null,
LAST_NAME VARCHAR2(50) not null
)
// DogEntity.java
private OwnerEntity owner;
@ManyToOne()
@JoinColumn(name = "OWNER_ID", foreignKey = @ForeignKey(name = "FK_OWNER_ID"))
public OwnerEntity getOwner() {
return owner;
}
public void setOwner(OwnerEntity ownerEntity) {
this.owner = ownerEntity;
}
DOG.OWNER_ID
是返回所有者表的外键。
OWNER.OWNER_ID
是 Owner 表的主键。
这是当前公司遵循的命名约定,我已经尝试了 @JoinColumn 配置的几种变体,但我似乎无法完全正确。我尝试过的一切都会导致错误,例如无法创建持久性单元。
CWWJP0015E: An error occurred in the org.hibernate.jpa.HibernatePersistenceProvider persistence provider when it attempted to create the container entity manager factory for the api-unit persistence unit
使用此配置:
@ManyToOne()
@JoinColumn(name = "OWNER_ID", referencedColumnName = "OWNER_ID")
public OwnerEntity getOwner() {
我最终得到与上述相同的错误。理想情况下,我想更改列的名称,但这是不可行的。
我发现的可能解决方案是:
@JoinColumn(name = "owner_id", referencedColumnName = "OWNER_ID")
输出是:
Hibernate:
select
dogentity0_.DOG_ID as dog_id1_0_0_,
dogentity0_.NAME as name2_0_0_,
dogentity0_.owner_id as owner_id3_0_0_,
ownerentit1_.OWNER_ID as owner_id1_1_1_,
ownerentit1_.FIRST_NAME as first_name2_1_1_,
ownerentit1_.LAST_NAME as last_name3_1_1_
from
APP.DOG dogentity0_
left outer join
APP.OWNER ownerentit1_
on dogentity0_.owner_id=ownerentit1_.OWNER_ID
where
dogentity0_.DOG_ID=?
它有效,但它看起来很老套,很容易被忽视。我认为休眠版本并不重要,但以防万一。我在用5.4.30.Final
解决方案
推荐阅读
- python - psycopg2.ProgrammingError: 不完整的占位符: '%(' without ')'
- python-3.x - Python cv2返回其他大小的numpy数组而不是指定的
- spring - 在 Chrome 中的 Oauth2 重定向期间 Cookie 丢失
- wordpress - 永久链接和自定义分类/自定义帖子类型的问题
- asp.net - 如何在 .net API 代码中查找对 API 端点的请求被处理的位置?
- android - 如何使向上按钮返回而不是打开导航抽屉
- android - javax.net.ssl.SSLHandshakeException:使用 okhttp3:okhttp:4.2.2 在 api 级别 28 和 29 上握手失败
- python - 如果匹配后续捕获组,是否可以使 Python 正则表达式捕获组不匹配?
- javascript - 如何在点击时获取动态添加元素的索引号
- python - 熊猫:如何将字符添加到数据框中的所有整数列