我希望有人能帮我找到答案。
我正在使用旧数据库,我无法更改任何预先存在的表,因为其他应用程序依赖于它们。
我有三个主要的现有表:A,B,C。
A 有一个参考 B 的列(多对一关系)。问题是它应该与 C 而不是 B 有关系。所以我创建了一个 *-1 映射 BC。
Tables: A,B,C,BC (all have ID field)
A-B many to one
B-C many to one through BC
Needed:A-C without altering A,B or C
我不想有 B 或 BC 的 java 实体,只有 A 和 C,A 应该有一个字段 Ac
到目前为止,我尝试使用 @Formula 注释无济于事。
class A{
@ManyToOne
@Formula(value="select BC.c from BC where BC.b = b")
private C c;
}
这将产生以下 SQL:
select this_.c_ID from A this_
它显然失败了,因为表 A 中没有列 c_ID (为什么完全忽略公式?)。
删除 @ManyToOne 注释会产生:
select (select BC.c from BC where BC.b = this_.b) as formula_0 from A this_
这将是完美的,除非 Hibernate 需要一个 BINARY 值(类 C 的序列化?)并在转换它接收的 Integer 时抛出异常。
这个 ID 对于延迟加载应该足够了,但是我如何告诉它这样做呢?@ManyToOne 的任何使用都会破坏公式。
如何在不更改 A、B、C 表或创建 Java 类 B 或 BC 的情况下实现 AC 链接?
感谢您提供任何信息,丹