Java Hibernate:多对一使用公式

Java 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实体

我希望有人能帮我找到答案

我使用的是一个遗留数据库,我无法更改任何先前存在的表,因为其他应用程序依赖于它们

我有三个主要的现有表格: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实体用于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映射,因为这样会更有效。