命名查询,本机查询或Criteria API

时间:2013-04-23 21:05:52

标签: java oracle hibernate jpa

我需要以报告的形式报告来自3个不同表格的数据。

用户可以搜索的各种搜索组合是..

  1. INS_USER_ID和DateRange
  2. CUST_ACCT_ID
  3. CUST_ACCT_ID和DateRange
  4. 查询..

    select DISTINCT W.CUST_ACCT_ID, W.INS_USER_ID, WS.STTI_DATE, WS.STTI_AMT, WC.CMMT  from T_WRK W
           INNER JOIN T_WRK_STTI WS ON W.WRK_STTI_ID = WS.WRK_STTI_ID
           INNER JOIN T_WRK_CMMT WC ON W.WRK_ID = WC.WRK_ID
           WHERE W.CUST_ACCT_ID = 90610194 AND WS.STTI_DATE BETWEEN '01-JAN-12' AND '31-DEC-12'
    
    
    select DISTINCT W.CUST_ACCT_ID, W.INS_USER_ID, WS.STTI_DATE, WS.STTI_AMT, WC.CMMT  from T_WRKCS W  
           INNER JOIN T_WRKCS_STTI WS ON W.WRKCS_STTI_ID = WS.WRKCS_STTI_ID
           INNER JOIN T_WRKCS_CMMT WC ON W.WRKCS_ID = WC.WRKCS_ID
           WHERE W.INS_USER_ID = 231 AND WS.STTI_DATE BETWEEN '01-JAN-12' AND '31-DEC-12' 
    

    所有现有表都已使用Hibernate / JPA映射。

    我已经阅读了google中的各种方法,有人可以告诉我以下哪种hibernate方法最适合我的方案。

    1. NamedQuery
    2. NativeQuery
    3. Criteria API
    4. 我在想NamedQuery,但是没有看到跨越多个表的NamedQuery,一个例子会很棒。谢谢。

1 个答案:

答案 0 :(得分:0)

Example

@Entity
@NamedQuery(name="findSalaryForNameAndDepartment",
    query="SELECT e.salary " +
          "FROM Student e" +
          "WHERE e.department.name = :deptName AND " +
          "      e.name = :empName")

您也可以在部门表中添加联接并稍微更改查询

日期使用参数

em.createNamedQuery("xxx").setParameter("srtartDate", ...).setParameter("endDate",..)