簡體   English   中英

從休眠的兩個表中選擇實體

[英]Select entity from two tables in hibernate

我有兩個這樣的表:

+------------+             +------------+ 
| Parent     |             | Child      | 
+------------+             +------------+ 
|child_id    |------------>|id          | 
|id          |             |date        | 
|name        |             +------------+ 
+------------+

我需要根據date提取類型為Parent對象

這是我的查詢:

Query query = session.createQuery(
      "SELECT p.child_id, p.id, p.name from Parent p, Child c 
       WHERE p.child_id = c.id
       AND c.date between :date and CURRENT_DATE ");

query.setTimestamp("date",new Date(2012,1,1));

List<Parent> objList = query.list()     // List<Object[]> instead of List<Parent>

我已經嘗試了好幾個小時,然后就再也無法接近了。 您能否告訴我查詢的問題或如何實現我的目標?

編輯:我發現一個問題: new Date(2012,1,1)正在創建3092年的日期,我通過通過java.sql.Date添加日期來修復它

結果是List<Object[]> ,我知道我可以迭代每個對象向量,並使用對象中的值創建一個新的Parent,但是沒有辦法直接從查詢列表中獲取Parent對象嗎?

如果使用此呼叫,時間將被切斷:

query.setDate(...);

而是使用以下調用:

query.setTimestamp(...)

也嘗試使用條件查詢

如:

criteria.add(Expression.eq("date", new Date()));

如果查詢沒有日期限制,則可以通過比較日期進行一些實驗。 例如,如下:

...
Date customDate = new Date(2012, 1, 1);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");    

StringBuilder query = new StringBuilder("from Child c");
query.append(" where c.date >= '" + simpleDateFormat.format(customDate) + "'");

Query result = session.createQuery(query.toString());
List resultList = result.list();
...
query.setParameter("date",new Date(2012,1,1));

使用setParameter方法而不是setDate

原來有兩個問題,這是每個問題的解決方案:

  1. 日期問題

應當避免使用java.util.Date(int year, int month, int day)因為它弄亂了日期。 您可以使用java.util.Calendar並為其設置日期來解決此問題。

然后您需要將其轉換為java.sql.Date以匹配查詢語法

  1. 查詢實體列表而不是對象[]

我設法使用以下查詢從查詢​​中直接獲取列表(無需手動迭代Objects[]列表並自己創建Parent實體):

Query query = session.createSQLQuery("select p.* from myscheme.Parent p, myscheme.Child c
     WHERE p.child_id = c.id AND c.date > :date ")
    .addEntity(Parent.class);
query.setTimestamp("date",sqlDate);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM