当@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