java - Hibernate:多对一使用公式

标签 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

我不想让 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/

相关文章:

java - scalac v javac 和 scala v java

java - Hibernate 元数据的唯一性

java - 如何在面向 JavaEE 开发人员的 Eclipse 4.4 版中禁用 APT Web 服务验证

mongodb - java.lang.NoSuchFieldError : FSYNCED

java - HibernateUtil 类的一个好的替代通用名称是什么?

动态列的 Excel 公式

r - 附加到公式的正确方法,其中公式和要附加的内容都是参数

excel - 如果,那么,重复 Excel 公式

java - 用于范围分页的数据库缓存策略

java - Java 1.6 中的 future 任务