带有条件的休眠调用函数

Posted

技术标签:

【中文标题】带有条件的休眠调用函数【英文标题】:Hibernate call function with criteria 【发布时间】:2014-06-13 00:11:13 【问题描述】:

我是休眠新手。 我想用标准调用我的自定义函数。 简单地说,我想这样调用函数:SELECT * FROM table WHERE test=1 ORDER BY my_own_function(arg1, arg2) asc 这个问题可以通过使用HQL来解决。 但是我有很多可选条件,所以我必须动态附加条件。 有没有办法解决这个问题?如果没有,你能告诉我其他方法吗?

【问题讨论】:

嘿,你解决了吗?我也有同样的问题。 @Stony 我已经通过使用 HQL 而不是 Criteria 解决了它。使用 Criteria,似乎没有支持通过休眠调用我自己的函数的方式。 非常感谢您的回复。我有 2 个使用标准的解决方案; 1. 延长订单; 2.用户公式添加列排序。 【参考方案1】:

由于评论只支持一行,所以我在这里粘贴我的解决方案, 1.扩展订单,链接为extend Order

package ro.tremend.util.hibernate;

import org.hibernate.criterion.Order;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;

/**
 * Extends @link org.hibernate.criterion.Order to allow ordering by an SQL formula      passed by the user.
 * Is simply appends the <code>sqlFormula</code> passed by the user to the resulting SQL query, without any verification.
 * @author Sorin Postelnicu
 * @since Jun 10, 2008
 */
  public class OrderBySqlFormula extends Order 
private String sqlFormula;

/**
 * Constructor for Order.
 * @param sqlFormula an SQL formula that will be appended to the resulting SQL query
 */
protected OrderBySqlFormula(String sqlFormula) 
    super(sqlFormula, true);
    this.sqlFormula = sqlFormula;


public String toString() 
    return sqlFormula;


public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException 
    return sqlFormula;


/**
 * Custom order
 *
 * @param sqlFormula an SQL formula that will be appended to the resulting SQL query
 * @return Order
 */
public static Order sqlFormula(String sqlFormula) 
    return new OrderBySqlFormula(sqlFormula);

    使用公式添加要排序的列 Use formula

【讨论】:

以上是关于带有条件的休眠调用函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在收到异步函数的回调之前使线程休眠?

在 for 循环打字稿和休眠死锁中调用异步函数

如何使用信号调用同一进程中的另一个线程在轮询函数上休眠的进程而不杀死它?

如何使用休眠条件运行函数?

函数 rowSelected 已被调用两次(选中和取消选中)

c语言休眠函数怎么写