我在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/