@OneToMany のターゲットが (@SecondaryTable を使用して) 複数のテーブルにマップされたエンティティであり、並べ替えプロパティがセカンダリ テーブルにある場合、@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;
}
}
これは、Hibernate 固有ではなく、JPA @OrderBy アノテーションを使用しています。
Hibernate のバージョンは 3.6.9 です。
これらのクラス内では、すべてがプロパティを使用してマップされます。
他の無関係なクラスは混合アクセス モードを使用します
@Where 句で同じ問題を示していると思われる既存の JIRA アイテムがあります。
https://hibernate.onjira.com/browse/HHH-4246
例外は、標準の SQL 無効列エラーです。
生成された SQL は次のとおりです。「order by」は、エイリアスの利点0_を参照してdisplay_sequenceを参照する必要があります。
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