1

我有以下图表:

OrderLine
    OrderLineExtension
        OrderLineExtensionA
        OrderLineExtensionB
        OrderLineExtensionC

OrderLine 包含一组 OrderLineExtension。
OrderLineExtension 定义为:@Inheritance(strategy = InheritanceType.JOINED) 并被标记为实体并且是抽象的

在 db 中为层次结构中的每个类创建一个表。

我正在尝试执行查询,其中 OrderLine 上的项目名称为“item”,但 OrderLineExtensionA 中的 orderReferenceNumber“orderRef”。

我不确定如何从 OrderLine 遍历到 OrderLineExtensionA,因为没有从 OrderLineExtension 到 OrderLineExtensionA 的 java 引用。

到目前为止,我已经得到了这个,这当然是行不通的。

filter=DetachedCriteria.forClass(OrderLine.class);
    .add(Restrictions.eq("item", "item"));
    .createCriteria("orderLineExtension")
        .add(Restrictions.eq("orderReferenceNumber", "orderRef"));

这失败了,因为休眠抱怨它无法在类 orderLineExtension 中找到 orderReferenceNumber,这是真的,因为它在 orderLineExtensionA 中。但是,我如何遍历扩展?我不能嵌套另一个 createCriteria,因为超类中没有对子类的引用。

任何帮助,将不胜感激。

4

1 回答 1

0

哎呀,别担心。之所以会出现这个问题,是因为我没有意识到一位同事在每个加入的子类中都创建了相同的字段。Hibernate 只会去第一个子类加载属性。这就是为什么我得到了错误的实例。

现在我们重命名了它们,一切正常。虽然我的头挠了一会儿。

于 2010-02-01T13:45:59.750 回答