【问题标题】:Criteria query with restriction across a joined subclass problem跨连接子类问题的限制条件查询
【发布时间】:2010-01-26 13:17:14
【问题描述】:

我有以下图表:

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"));

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

任何帮助将不胜感激。

【问题讨论】:

    标签: java hibernate inheritance criteria detachedcriteria


    【解决方案1】:

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

    现在我们已将它们重命名,一切正常。不过让我头疼了一阵子。

    【讨论】:

    • 如果无法更改属性名称,如何指定要使用的子类?
    猜你喜欢
    • 1970-01-01
    • 2013-11-02
    • 2011-10-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多