gpt4 book ai didi

java - 从 hbm 文件生成 Hibernate 复合键对象

转载 作者:行者123 更新时间:2023-12-01 16:03:19 25 4
gpt4 key购买 nike

(括号内的咆哮:)我是一个 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 文件创建这个复合 key 对象并将其与其兄弟一起存储。问题是,它没有映射到任何特定的(或者,您可以说它映射到 2 个表)。我正在尝试确定是否可以使用 hbm 文件创建此复合键类,以及是否建议这样做。我是否以错误的方式处理这个问题?

提前致谢。

最佳答案

我认为你误解了这个关键对象。您应该编写一个java类来表示这个键,在本例中由一个id和一个版本组成。然后使用此类作为复合主键类型。您在数据库中看不到有关此类的任何信息。它仅由您和 hibernate 使用来识别实例。

一对一关系用于同步主键。一个对象应该引用另一个对象,并从中获取自己的主键。

文档:

大多数从 SQL 切换到 Hibernate 的人都会感到沮丧,因为他们尝试像使用 SQL 一样使用 Hibernate。然后他们不会从中受益,但会获得额外的开销。

这是我的简短建议:你不应该再用表格来思考。除非您正在编写映射文件,否则就忘记表。只考虑类、对象和面向对象的结构。不要对您想要“在数据库中执行的操作”的所有内容执行查询。在大多数事务中,您在开始时执行单个查询,然后使用延迟加载(您的代码无法识别)沿属性导航。实现实际逻辑的代码不再了解有关数据库的任何信息。然后使用 hibernate 就开始变得有趣了。

关于java - 从 hbm 文件生成 Hibernate 复合键对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com