@OrderBy problem [message #816907] |
Fri, 09 March 2012 07:11  |
Eclipse User |
|
|
|
Hi,
I would appreciate any help with this problem:
Let's assume I have three entities: Order, Item and Type (one order can contain number of items. Every item holds a Type reference)
I'd like the itemList collection to be sorted by "type.code". But the @OrderBy("type.code") annotation allways throw QueryException : Invalid query key [code] in expression
Can anybody help?
Thanks
@Entity
public class Order
@Id
@Column(name = "order_id")
private Integer orderId;
@Column(name = "order_date")
@Temporal(TemporalType.DATE)
private Date orderDate
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
@OrderBy("type.code")
private List<Item> itemList
....
@Entity
public class Type
@Id
@Column(name = "type_id")
private Integer typeId;
@Column(name = "type_code")
private Integer code
....
@Entity
public class Item
@Id
@Column(name = "item_id")
private Integer itemId;
@Column(name="item_text")
private String itemText;
@Column(name="item_value")
private Integer itemValue;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "order_id", referencedColumnName = "order_id")
private Order order
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "type_id", referencedColumnName = "type_id")
private Type type
|
|
|
|
|
|
Re: @OrderBy problem [message #1711582 is a reply to message #825186] |
Sat, 17 October 2015 14:18  |
Eclipse User |
|
|
|
Thank You, James - that hint was very helpful. A DescriptorCustomizer can be used to achieve the requirement. In my case, I needed something similar to "JPQL Path Expressions", to navigate through Entities and related objects, for getting a @OneToMany list sorted. (hint: native @orderBy(...) is only applicable to more trivial cases, as far as I know, no path expressions / navigation allowed there)
@Entity
@Table(name = BmAccount.bm_account)
@Customizer(BmAccountE.BmAccountECustomizer.class)
public class BmAccountE implements Serializable {
public static class BmAccountECustomizer implements DescriptorCustomizer {
@Override
public void customize(ClassDescriptor descriptor) throws Exception {
OneToManyMapping o2m = ((OneToManyMapping) descriptor
.getMappingForAttributeName("accountUsers"));
ReadAllQuery raq = (ReadAllQuery) o2m.getSelectionQuery();
raq.addOrdering(raq.getExpressionBuilder()
.get("user").get("userName").toUpperCase().ascending());
}
}
...
|
|
|
Powered by
FUDForum. Page generated in 0.02851 seconds