我需要使用標準來查詢數據庫。 我正在搜索的數據有一個日期,說'startDate',我有一個月說1月,我需要提取所有的數據,其中startDate月= 0;在SQL我會使用像'where month(startDate)= 0',但我不知道如何做到這一點與休眠標準,如果它是可能的。 你能幫我嗎? 謝謝你們。 盧卡。如何使用Hibernate條件在一個月查詢日期
3
A
回答
6
有了標準,我認爲你必須編寫自己的表達式類。像這樣的東西應該工作(沒有測試過,雖然):
public class MonthEqExpression implements Criterion {
private final String propertyName;
private final int month;
public MonthEqExpression(String propertyName, int month) {
this.propertyName = propertyName;
this.month = month;
}
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
throws HibernateException {
String[] columns = criteriaQuery.findColumns(propertyName, criteria);
if (columns.length!=1) {
throw new HibernateException("monthEq may only be used with single-column properties");
}
return "month(" + columns[0] + ") = ?";
}
@Override
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
return new TypedValue[] {new TypedValue(IntegerType.INSTANCE, month, EntityMode.POJO)};
}
@Override
public String toString() {
return "month(" + propertyName + ") = " + month;
}
}
然後,你可以在一個標準中使用這個表達式:
criteria.add(new MonthEqExpression("startDate", 0));
1
答案上面並沒有爲我工作,但與現在正在進行一些改變。
public class MonthEqExpression implements Criterion {
private final String propertyName;
private final Long month;
public MonthEqExpression(String propertyName, Long month) {
this.propertyName = propertyName;
this.month = month;
}
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
String[] columns = criteriaQuery.getColumns(propertyName, criteria);
if (columns.length != 1) {
throw new HibernateException("monthEq may only be used with single-column properties");
}
return "extract(month from " + columns[0] + ") = ?";
}
@Override
public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
return new TypedValue[] {new TypedValue(criteriaQuery.getIdentifierType(criteria), month, EntityMode.POJO)};
}
@Override
public String toString() {
return "extract(month from " + propertyName + ") = " + month;
}
}
然後,你可以在一個標準中使用這個表達式:
criteria.add(new MonthEqExpression("startDate", new Long(1)));
相關問題
- 1. 如何查詢linq查詢日期是在月,季或一年
- 2. Hibernate條件查詢 - 查詢條件
- 3. sql查詢條件日期
- 4. 如何在c中查詢12個月後的日期#
- 5. 在fullcalendar.js中使用PHP日期前一個月的條目
- 6. 如何從日期查詢中獲取日期和月份?
- 7. 手動添加一個日期(月)列查詢在SQL
- 8. sql查詢基於月結束日期生成月薪日期
- 9. 在Hibernate查詢捐贈標準,瞭解其開始日期爲上月的日期,即當前月減1
- 10. 如何比較字符串日期+一個月當前日期+一個月
- 11. 如何根據日期條件在LINQ查詢中選擇一個列
- 12. 如何將查詢中的日期與上個月的日期進行比較
- 13. 如何檢查兩個日期之間的每個月的條件
- 14. Rails查詢 - 如何比較兩個日期的月份?
- 15. 如何在Hibernate條件中編寫多個子查詢
- 16. 日期數據類型選擇查詢日期與在條件
- 17. 在PostgreSQL的Timestamp Column上使用Hibernate進行日期查詢
- 18. 如何重置月份日期條目
- 19. 查詢日期來自同一列,有幾個條件
- 20. ActiveRecord條件查詢日期不工作
- 21. mysql中的條件日期查詢
- 22. MySQL查詢更新僅一個月日期
- 23. 的Oracle SQL查詢列出前一個月的所有日期
- 24. Hibernate過濾器可以與條件查詢一起使用嗎?
- 25. 如何使用mysql獲取本月最後一個星期日的日期?
- 26. 的日期(年,月)命名查詢
- 27. 如何將日期定位到該月的第一個日期?
- 28. 如何從日期找到一個月的遺體日期?
- 29. 如何取得日期:距離特定日期一個月?
- 30. 日期UTC一個月關
它工作得很好,謝謝你,我無法想出了這樣一個解決方案,我覺得可憐。 – 2011-03-24 12:50:16
@Luca Paoli:Hibernate是開源的。我只是查看了hibernate代碼中現有表達式的代碼。 – 2011-03-26 07:34:01