如何解决Hibernate 为 OneToOne 关联生成错误的外键约束?
我们在表 T1 中有以下列定义,其中包含 A、B 和 C 列,并且应该引用带有 A、B 和 D 列的表 T2,其中 A 和 B 是主键的一部分,而 D 不是。表 T1 中不存在 C 列。我们需要将 C 列映射到 D 列上。
@OneToOne(cascade = CascadeType.ALL,optional = false)
@JoinColumn(name = "A",referencedColumnName = "A")
@JoinColumn(name = "B",referencedColumnName = "B")
@JoinColumn(name = "C",referencedColumnName = "D")
private T2 t2;
并且Hibernate生成如下alter table语句:
alter table T1
add constraint FKqrwipa0yxatqw2rsgpdm93wle
foreign key (A,B,C)
references T2
根据我们目前的理解,alter table 约束是错误的。 它不应该包含referencedColumnNames吗?我们的期望(和需求)是
alter table T1
add constraint FKqrwipa0yxatqw2rsgpdm93wle
foreign key (A,D)
references T2
因为表 T2 中不存在列“C”,所以那里只存在“D”。 所以所有反对这个模型的声明都将失败。
有人可以解释这种行为吗?
解决方法
这就是这个注解的定义方式。 name
定义的连接列是声明实体的表中的列。 referencedColumnName
是目标实体表中的那个。如果源表 T1
上的列是 A
、B
、D
,目标 T2
上的列是 A
、{{1} },B
,则需要交换列名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。