【发布时间】:2010-07-15 13:05:54
【问题描述】:
(括号里的咆哮:)我是一个 Hibernate 初学者,对我可以在 15 秒内用 SQL 编写的简单连接的开销感到有些沮丧。 (结束咆哮)
情况是这样的:我有 2 个表,它们都包含相同的复合主键 - 我们将两个表中的列称为“ID”和“版本”。我需要两个表中关于特定 ID/版本的数据,所以
select a.xxx, b.yyy
from tableA a, tableB b
where a.ID = b.ID
and a.Version = b.Version
and .....
糟糕的桌子设计,但不在我手中。
在 Hibernate 中,我的在线研究建议创建一个单独的复合键类以供表共享,其中一个 A 对象包含一个 B 对象,并且在 A 的 hbm 文件中它们之间存在一对一的映射。
在我的项目中,我所有的 Hibernate 数据对象都是用 hbm 文件生成的,并且位于同一个地方。所以我想知道我是否也可以使用 hbm 文件创建这个复合键对象并将其与它的兄弟一起存储。问题是,它没有特别映射到任何 table (或者,您可以说它映射到 2 个表)。我正在尝试确定是否可以使用 hbm 文件创建此复合键类,以及是否建议这样做。我是不是走错了路?
提前致谢。
【问题讨论】:
-
你能发布一个表定义的例子吗?您的意思是这两个表共享相同的键定义(即两个表都有一个复合主键
id和version;但它们是恰好具有相同类型键的单独实体),或者两个表都引用了定义这个“关键”实体的第三个表? -
由于专有原因,我无法发布我的代码,并且编写示例将花费太长时间。但是,是的,您的第一种可能性是正确的 - 两个表恰好都有 id/version 的复合主键,我想要两个表中的一些数据,所以我需要将表 A(id/version)的复合 PK 加入到复合 PK表 B(ID/版本)。因此,我使用了相同的复合键类作为两个实体的 id。这不是我上面的问题,但我现在很难让 DAO 工作,很多“无法解决属性”错误......可能是另一篇文章的主题。