And*_*uta 7 oracle hibernate hibernate-criteria
假设我有一个实体MyEntity
,它有一个基于公式的属性fmlaProp
.现在说我创建一个标准:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.property("fmlaProp")))
.addOrder(Order.asc("fmlaProp"));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到以下SQL:
SELECT DISTINCT fmlaProp-sql FROM MY_ENTITY_TABLE ORDER BY fmlaProp-sql
Run Code Online (Sandbox Code Playgroud)
这给了Oracle一个错误,说明了order-by表达式是未选中的.然后我尝试了以下标准:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.alias(
Projections.property("fmlaProp"),
"alias1"))
.addOrder(Order.asc("alias1"));
Run Code Online (Sandbox Code Playgroud)
哪个生成"按别名排序1",工作正常.但它有点难看 - 代码必须"知道"那些违反"一次写入"原则的公式属性.对此有何想法或建议?先感谢您.
这是 Hibernate 的预期行为。它与公式属性无关,但您想要使用预计值进行排序。来自Hibernate 文档:
可以将别名分配给投影,以便可以在限制或排序中引用投影值。这里有两种不同的方法来做到这一点......
至于替代方案,您可以尝试将公式属性设置为虚拟列(在 Oracle 11 及更高版本中)或将表包装在计算该列的视图中。这样,Oracle 将fmlaprop
直接知道,这可以像“普通”列一样使用。
归档时间: |
|
查看次数: |
2164 次 |
最近记录: |