我希望有人能帮我找到答案。
我正在使用遗留数据库,我无法更改任何预先存在的表,因为其他应用程序依赖于它们。
我有三个主要的现有表格: 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链接?
感谢您的任何信息, 丹