2011-10-14 158 views
5

儘管3小時的搜索和搜索API,但我無法找到任何有關是否可以在hibernate條件查詢中使用數據庫函數的參考。具體如下:使用數據庫函數轉換休眠條件中的列

我想通過postgres數據庫和組訪問日期時間的日期部分。我想這個查詢看起來是這樣的:

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.property("DATE(beginExam)").as("beginDate")) 
    .add(Projections.groupProperty("beginDate"))) 
    .list(); 

這不起作用給我一個「無法解決財產:日期(beginExam)...」異常。看起來這是一件非常簡單的事情,我必須錯過一些東西。鑑於我也動態構建限制(我已經在示例中留下了這些限制),似乎標準是用於此目的的hibernate組件,但我願意接受任何建議,以避免在整個問題上出現問題通過建立我自己的小組。

感謝

回答

1

Projections.sqlProjection看一看,Porjections.sqlGroupProjection

+0

我做到了,徹底。在衆多的eq方法和之間,沒有方法可以將列的值轉換爲日期,因此可以將其比較或放入groupProperty中。 – user996088

+0

@ user996088:beginExam的數據類型是什麼?你可以在Projections.sqlProjection中使用_any_ SQL,所以我不明白你爲什麼不能把它轉換成日期。 – tscho

+0

我的錯。在我的焦慮中,我沒有意識到,卡卡瑪用錯誤的聯繫指引了我正確的方向。 – user996088

8

你試過Projections.sqlProjection這樣

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.sqlProjection("date(beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
    .add(Projections.groupProperty("beginDate"))) 
.list(); 

或Projections.sqlGroupProjection這樣

session.createCriteria(Exam.class) 
    .setProjection(Projections.sqlGroupProjection("date(beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
.list(); 

休眠基因在SQL查詢費率表的別名,所以你可能需要將{alias}片段添加到您的SQL片段來完成這項工作:

session.createCriteria(Exam.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.sqlProjection("date({alias}.beginExam) as beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
    .add(Projections.groupProperty("beginDate"))) 
.list(); 

SQLGroupProjection

session.createCriteria(Exam.class) 
    .setProjection(Projections.sqlGroupProjection("date({alias}.beginExam) as beginDate", "beginDate", new String[] { "beginDate" }, new Type[] { StandardBasicTypes.DATE })) 
.list(); 
+0

啊!非常好,非常感謝。我會解決這個問題。 – user996088

+0

@ user996088:請注意我關於「{別名}」片段的編輯,我的建議解決方案是否可行?我有點好奇,因爲我沒有真正執行其中的一個查詢,我只是在這裏寫的(所以也可能會出現拼寫錯誤) – tscho

+0

感謝Tscho,你的最後一個例子爲我工作 Projections.sqlGroupProjection ... –