我正在使用远程排序和分页在网格(ExtJS)中为用户呈现数据。假设我有一个包含一些订单的网格。订单实体看起来像 Order{OrderNumber, Customer, Date, Address{Street, City, PostCode}}。Customer 被 NH 映射为关系,Address 被映射为组件。网格中显示的数据被展平为如下命名的列:OrderNumber、Customer.Number、Customer.Name、Date、Address.Street、Address.City、Address.PostCode。
用户选择他想要排序的列,网格将字段名称发送到服务器。现在在服务器端,我需要向后恢复实体属性属于网格字段名称,并确定它是组件还是关系,并使用 CreateAlias + AddOrder 等构建标准。这个逻辑充满了如下代码:
if (gridField=="Customer.Name"){
cri = cri.createAlias("Customer", "customerAlias");
cri.AddOrder(Order.Asc("customerAlias.Name"));
}
这已经简化了很多,但目前看起来一定是这样的。我正在寻找一些通用的更智能的解决方案。有什么想法吗?我现在面临的问题是我可以有一个转换实体属性(包括嵌套组件和关系)的约定,但是我需要一个方法来确定该字段是否像组件或关系一样映射。这将是相当沉重的......