Java Hibernate:多对一使用公式
我希望有人能帮我找到答案 我使用的是一个遗留数据库,我无法更改任何先前存在的表,因为其他应用程序依赖于它们 我有三个主要的现有表格:A、B、C A有一列引用B(多对一关系)。问题是它应该与C有关,而不是与B有关。所以我创建了一个*-1映射BCJava Hibernate:多对一使用公式,java,hibernate,formula,annotations,many-to-one,Java,Hibernate,Formula,Annotations,Many To One,我希望有人能帮我找到答案 我使用的是一个遗留数据库,我无法更改任何先前存在的表,因为其他应用程序依赖于它们 我有三个主要的现有表格: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 我不想让java实体
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
我不想让java实体用于B或BC,只需要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需要一个二进制值(类C的序列化?)并在转换它接收的整数时抛出异常
这个ID对于延迟加载应该足够了,但是我如何告诉它这样做呢?任何对@ManyToOne的使用都会打破这个公式
如何在不改变A、B、C表或创建java类B或BC的情况下实现A-C链接
谢谢你提供的任何信息,
Dan听起来很像,不幸的是,没有使用注释进行修复,但是您可能会使用这些类的xml映射文件。这应该在Hibernate 3.5.0-Beta-2+中工作(已修复)。是的,您是对的,这似乎是相同的问题。我真的很想在注释中保留所有映射。现在,我已经添加了B类和BC类,但是我可能只为这个类更改为xml映射,因为这样会更有效。