1

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

0 に答える 0