我在Hibernate中遇到查询问题。我有一个带有现有数据的“测试”表。我有一个无法修改测试表架构的要求,因此我创建了另一个表“ testExtension”,其主键是Test主键的外键。 testExtension中的数据是测试中数据的子集。即,“ 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中。

当我尝试从这些表查询数据时发生了我的问题。现在,如果我使用TestExtension.class到QBE查询特定的test_id,则仅当该ID同时存在于Test和TestExtension中时,它才会返回一行。如果我对QBE使用Test.class,它将返回该行,但我将无权访问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查询“扩展表”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/844222/

10-09 13:28