2013-03-12 69 views
1

如何優化而不sqlRestriction以下:休眠。優化sqlRestriction

public List<SomeEntity> getEntityByYearMonthAndDay(Calendar cal) { 
     Criteria criteria = helper.createCriteria(); 
     criteria.add(sqlRestriction("(DATE(date_column) = ?)", cal.getTime(), org.hibernate.type.StandardBasicTypes.DATE)); 
     return criteria.list(); 
} 

SomeEntity看起來像:

@Entity 
    @Table(name="some_table") 
    public class SomeEntity extends Identifiable { 


     @Column(name = "date_column") 
     private Calendar dateColumn; 

//Getters and setters 
    } 

在DB我有這樣的表示: date_column =>日期時間(YYYY-MM-DD HH:MM:SS)。

很明顯,邏輯只比較日期截斷時間值。

回答

2

呀,你們:) 所以,如果你想不使用內置的MySQL DATE(...)功能,並且只使用JPA:

public List<SomeEntity> getEntityByYearMonthAndDay(Calendar cal) { 
    Criteria criteria = helper.createCriteria(); 
    Calendar leftBorder = Calendar.getInstance(); 
    leftBorder.setTime(cal.getTime()); 
    Calendar rightBorder = Calendar.getInstance(); 
    rightBorder.setTime(cal.getTime()); 
    rightBorder.add(Calendar.DATE, 1); 
    Conjunction dateConjunction = Restrictions.conjunction(); 
    dateConjunction.add(Restrictions.eq("dateColumn", leftBorder)); 
    dateConjunction.add(Restrictions.lt("dateColumn", rightBorder)); 
    criteria.add(dateConjunction); 
    return criteria.list(); 
} 
+0

是什麼?幫手 – HCarrasko 2014-07-17 21:40:56