【问题标题】:How to call oracle function using Hibernate criteria?如何使用 Hibernate 标准调用 oracle 函数?
【发布时间】:2015-10-13 15:42:43
【问题描述】:

我是 Hibernate 的新手。我正在建立一个登录门户。我们使用 DB Function 来加密用户密码。似乎在现有数据库上对复杂的查询/函数/过程使用休眠是很困难的。 是否可以使用 Hibernate 标准编写以下查询? SQL 查询 1:

SELECT first_name
FROM user.emp_group
WHERE username = 'XXX'
    AND user.decrypt(password, 2) = 'YYYY';

SQL 查询 2:

SELECT a.DESC
    ,b.total
FROM user.STATUS a
    ,(
        SELECT STATUS
            ,count(*) total
        FROM user.emp
        GROUP BY STATUS
        ) b
WHERE a.TYPE = b.STATUS (+)

User 是模式名,decrypt 是函数名。

我还遇到了从视图中获取数据的问题,这篇 Stackoverflow 帖子解决了这个问题。 How hibernate retrieve data from existing database view? 谢谢。

【问题讨论】:

    标签: java oracle hibernate hibernate-criteria


    【解决方案1】:

    您可以将本机 SQL 与 hibernate 一起使用。

    方式是这样的(例如):

    String sql = "SELECT first_name, salary FROM EMPLOYEE";
    SQLQuery query = session.createSQLQuery(sql);
    List data = query.list();
    
         for(Object object : data)
         {
            Map row = (Map)object;
            System.out.print("First Name: " + row.get("first_name")); 
            System.out.println(", Salary: " + row.get("salary")); 
         }
    

    【讨论】:

    • 谢谢.. 我试过原生 sql。有用。但是由于我使用的是hibernate,所以我想使用它的api,特别是用于构建应用程序的标准api,如果使用标准令人头疼,也许还可以使用hql。
    • 但是你不能通过条件调用特定的oracle函数
    • 你的意思是,没有办法使用标准api调用函数?
    • 我不确定,但我认为您可以使用 Expression.sql() 我以前从未使用过它......但我认为这是方式。您可以在此处查看 API:docs.jboss.org/hibernate/core/3.3/api/org/hibernate/criterion/… 问题是它已被弃用,您应该使用 Restrictions.sqlRestriction(String)
    猜你喜欢
    • 2010-12-14
    • 2018-04-23
    • 2012-12-29
    • 1970-01-01
    • 2013-12-06
    • 2011-02-21
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多