2013-04-23 61 views
0

我需要以報表的形式報告來自3個不同表格的數據。命名查詢,原生查詢或標準API

的各種搜索組合用戶可以與搜索是..

  1. INS_USER_ID和DATERANGE
  2. CUST_ACCT_ID
  3. CUST_ACCT_ID和DATERANGE

查詢..

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進行了映射。

我已經閱讀了足夠的關於谷歌的各種方法,有人可以告訴我哪一種以下的休眠方法最適合我的方案。

  1. NamedQuery
  2. NativeQuery
  3. 標準API

我想NamedQuery,但還沒有看到一個NamedQuery多個表格的,一個例子將是巨大的。謝謝。

回答

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",..) 
+0

如果其選擇單個實體/表(這裏是學生),然後使用命名查詢是好的,但在我的情況下,我需要從多個表中選擇,因爲命名查詢只是綁定到它所在的表。我正在尋找一個示例,其中select是跨越多個表。 – 2013-04-24 13:58:22

+0

我現在不能嘗試,但是像這樣的一個sql也可以在命名查詢中工作:SELECT e.salary FROM Student e,Department d WHERE e.department_id = d.id and d.name =:deptName AND e.name =:empName – Cris 2013-04-24 14:35:47