Giả sử tôi có một thực thể MyEntity
và có thuộc tính dựa trên công thức fmlaProp
. Bây giờ nói tôi tạo ra một tiêu chí:Hibernate - Tiêu chí đặt hàng theo thuộc tính công thức
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.property("fmlaProp")))
.addOrder(Order.asc("fmlaProp"));
trong trường hợp này tôi nhận được lệnh SQL sau:
SELECT DISTINCT fmlaProp-sql FROM MY_ENTITY_TABLE ORDER BY fmlaProp-sql
Mà cho một lỗi trên Oracle nói rằng lệnh của biểu thức là không được chọn. Sau đó, tôi đã thử các tiêu chí sau:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.alias(
Projections.property("fmlaProp"),
"alias1"))
.addOrder(Order.asc("alias1"));
nào tạo ra "tự do alias1" mà hoạt động tốt. Nhưng nó là loại xấu xí - mã phải "biết" những thuộc tính công thức, mà vi phạm nguyên tắc "viết một lần". Bất kỳ suy nghĩ hoặc gợi ý về điều đó? Cảm ơn bạn trước.
Phần '-sql' là gì? – cherouvim