gpt4 book ai didi

java - 使用 Hibernate 查询 "extension tables"

转载 作者:行者123 更新时间:2023-12-01 16:11:53 27 4
gpt4 key购买 nike

我在 Hibernate 中遇到查询问题。我有一个表“测试”,其中包含现有数据。我有一个要求,不能修改测试表的架构,所以我创建了另一个表“testExtension”,其主键是测试主键的外键。 testExtension 中的数据是 test 中数据的子集。即“testExtension”中的行数将少于“test”中的行数。

我在配置文件中定义了这种关系,如下所示:

<class name="Test" table="test">
<id name="testId" column="test_id">
<generator class="sequence">
<param name="sequence">test_id_seq</param>
</generator>
</id>

<property name="name"/>


<joined-subclass name="TestExtension" table="testExtension">
<key column="test_id"/>

<property name="summary" />
<property name="homepage"/>
</joined-subclass>

通过此设置,我可以在 Java 程序中创建一个 TestExtension 对象,用数据填充它,通过 Hibernate“保存”它,然后提交事务。它正确地将数据保存在 Test 和 TestExtension 中。

当我尝试从这些表中查询数据时,出现了问题。现在,如果我使用 QBE 的 TestExtension.class 查询特定的 test_id,只有当 Test 和 TestExtension 中都存在该 id 时,它才会返回一行。如果我使用 Test.class 进行 QBE,它将返回该行,但我将无法访问 TestExtension 中存储的任何数据。

我的问题是:如何查询这些表,以便结果基于 Test 和 TestExtension 的“左外连接”?任何解决方案都值得赞赏,无论是通过示例查询、HQL 还是其他方式(尽管最好不是原始 SQL)。

谢谢!

最佳答案

HQL 可能是最简单的方法。文档在这里:

http://docs.jboss.org/hibernate/stable/core/reference/en/html/queryhql-joins.html

听起来您可能想要做的是重新映射关系,以便 Test 和 TestExtension 使用一对一关系而不是继承。然后,您可以使用一对一的左外连接来查询 Test 和 TestExtension。

关于java - 使用 Hibernate 查询 "extension tables",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/844222/

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