リモートの並べ替えとページングを使用して、グリッド(ExtJS)でユーザーのデータを表示しています。いくつかの注文があるグリッドがあるとしましょう。Orderエンティティは、Order {OrderNumber、Customer、Date、Address {Street、City、PostCode}}のようになります。顧客はNHによってリレーションとしてマップされ、アドレスはコンポーネントとしてマップされます。グリッドに表示されるデータは、OrderNumber、Customer.Number、Customer.Name、Date、Address.Street、Address.City、Address.PostCodeのような名前の列にフラット化されます。
ユーザーが並べ替える列を選択すると、グリッドがフィールド名をサーバーに送信します。サーバー側では、グリッドフィールド名に属するエンティティプロパティを逆方向に復元し、それが単なるコンポーネントなのか、それともリレーションなのかを判断し、CreateAlias+AddOrderなどを使用してCriteriaを構築する必要があります。このロジックは次のようなコードでいっぱいです。
if (gridField=="Customer.Name"){
cri = cri.createAlias("Customer", "customerAlias");
cri.AddOrder(Order.Asc("customerAlias.Name"));
}
これは非常に単純化されていますが、現時点では必然的にこのようになります。私はいくつかの一般的なよりスマートなソリューションを探しています。何かご意見は?私が今直面している問題は、エンティティプロパティ(ネストされたコンポーネントとリレーションを含む)を変換するための規則を設定できることですが、フィールドがコンポーネントまたはリレーションのようにマップされているかどうかを判断する方法が必要です。これはかなり重いでしょう....