2013-10-03 2 views
0

У меня есть поле, называемое ebOpenUptoDays и StartDate в моем классе домена под названием TrainingHQL: вычитать дни форма Дата, чтобы получить новую дату

теперь позволяет сказать

ebOpenUptoDays = 10 (дней)

StartDate = 30 октября 2013

я хочу, чтобы получить дату под названием ebExpiryDate из моего HQL с следующим расчетом

ebExpiryDate = StartDate - ebOpenUptoDays

ebExpiryDate = 20 октября 2013 (необходимость в этом формате)

trainingList = Training.executeQuery("SELECT ........... as ebExpiryDate from Training as t) 
+0

Вы можете использовать формулу для ebExpiryDate в домене –

+0

это не представляется возможным из HQL? – monda

ответ

1

вы можете использовать три возможных решения:

1) Попробуйте использовать DATE (DATE_SUB (StartDate, INTERVAL '$ {ebOpenUptoDays}' DAY)) в формуле в классе grails

2) Попробуйте использовать проекцию в createCriteria, например // Поддерживается в grails 2.1.0 или выше, я думаю.

Training.createCriteria.list{ 
    projections{sqlProjection("DATE(DATE_SUB(start_date, INTERVAL 'eb_Open_Up_to_days DAY))",DATE)} 
} 

3) Попробуйте использовать native sql

EDIT: Для поддержки HQL вам необходимо создать собственный диалект и использовать это в вас DataSource.groovy (не тестировался, хотя)

public class MyDialect extends MySQLInnoDBDialect{ 
     public myDialect() { 
     super(); 
     registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_sub(?1, INTERVAL ?2 ?3)")); 
     } 
    } 

затем, DATE (DATE_SUB (StartDate, INTERVAL 'ebOpenUptoDays' DAY)) должен работать для вас в hql. Надеюсь, что это поможет !!!

Благодаря

+0

Я зарегистрировал имя ebOpenUptoDays в своей базе данных – monda

+0

Прошу прощения DATE_SUB не поддерживается hql Обновление моего ответа сейчас –

+0

no way in Hql ...? Мне нужно это в hql – monda

Смежные вопросы