希望有人能帮我找到答案。
我正在使用遗留数据库,我无法更改任何预先存在的表,因为其他应用程序依赖于它们。
我有三个主要的现有表: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 应该有一个字段 A.c
到目前为止,我已经尝试使用@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 的情况下实现 A-C 链接?
感谢您提供任何信息, 丹
最佳答案
听起来很像bug ,不幸的是,没有准备好使用注释进行修复,不过您似乎可以使用这些类的 xml 映射文件。
关于java - Hibernate:多对一使用公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2334676/