Hibernate @SecondaryTable和@OrderBy

时间:2012-10-25 08:05:14

标签: hibernate jpa

当@OneToMany的目标是映射到多个表的实体(使用@SecondaryTable)并且sort属性位于辅助表中时,尝试使用@OrderBy批注对@OneToMany集合进行排序时遇到问题。

尝试访问属性时会抛出“未找到列”异常,因为生成的SQL order by子句使用主表的别名而不是辅助表引用排序列。

我无法看到任何可以添加的功能。有什么想法吗?

public class Product{

    @OneToMany(orphanRemoval = true, mappedBy = "product", cascade = CascadeType.ALL)
    // @OrderBy(value = "displaySequence")
    public Set<Benefit> getBenefits() {
    return benefits;
    }
}

public class Benefit{
    @Column(table = SECONDARY_TABLE_NAME, name = "display_sequence", nullable = false)
    public Integer getDisplaySequence() {
    return displaySequence;
    }
}

这是使用JPA @OrderBy注释而不是Hibernate特定的注释。

Hibernate的版本是3.6.9。

在这些类中,所有内容都使用属性进行映射。

其他不相关的类使用混合访问模式

有一个存在的JIRA项目似乎与@Where子句有相同的问题:

https://hibernate.onjira.com/browse/HHH-4246

异常是标准的SQL无效列错误。

生成的SQL如下所示。 'order by'应引用display_sequence并引用别名benefit0 _。

select 
.....
from as_benefits_additional_data benefits0_ 
inner join as_benefits benefit1_ on benefits0_.id=benefit1_.id 
left outer join as_benefits_additional_data benefit1_1_ on benefit1_.id=benefit1_1_.id 
inner join as_products product2_ on benefit1_1_.product_id=product2_.id 
left outer join as_products_additional_data product2_1_ on product2_.id=product2_1_.id 
where benefits0_.product_id=1 
order by benefit1_.display_sequence asc

0 个答案:

没有答案