2013-07-04 3 views
3

Мне нужно добавить подзапрос в grails.gorm.DetachedCriteria.Grails DetachedCriteria не содержит sqlRestriction

Я попытался сделать это другим grails.gorm.DetachedCriteria, но в этом случае я обнаружил, что grails.gorm.DetachedCriteria не содержит метода sqlRestriction().

Также я пытался добавить подзапрос с помощью instance.add(Subqueries.exists(subquqery)) и зимует org.hibernate.criterion.DetachedCriteria, этот способ работает, когда я использую CriteriaBuilder, но в grails.gorm.DetachedCriteria он не работает, потому что grails.gorm.DetachedCriteria не содержит instance переменных.

Может ли кто-нибудь мне помочь?

def result = DomainClass1.createCriteria().buildCriteria { 
    //some other conditions... 
    def subquery1 = DomainClass1.where { 
     //some other conditions... 
     def subquery2 = DomainClass2.where { 
      projections { 
       distinct 'id' 
      } 
      sqlRestriction 'timestamp < to_date(${date},'YYYYMMDDHH24MISS')' 
     } 
     eqAll 'id', subquery2 
    } 
    eqAll 'id', subquery1 
}.list() 
+1

Можете ли вы разместить свой код? – Alidad

+0

Когда используется 'sqlRestriction', убедитесь, что вы ссылаетесь на фактические имена столбцов таблицы, а не на имена свойств класса домена. – dmahapatro

+0

@dmahapatro конечно, но проблема в том, что 'grails.gorm.DetachedCriteria' не содержит этот метод, и я не знаю, как я могу его избежать. – Vartlok

ответ

0

Я думаю, что вы можете добиться того, что вы хотите без использования sqlRestriction.

def result = DomainClass1.createCriteria().buildCriteria { 
    //some other conditions... 
    def subquery1 = DomainClass1.where { 
     //some other conditions... 
     def subquery2 = DomainClass2.where { 
      //Assuming "timestamp" is the domain class property 
      //and not the column name and variable "date" is 
      //a string formatted date with the format 'yyyyMMddHHmmss' 
      timestamp.before(Date.parse('yyyyMMddHHmmss', date)) 
      projections { 
       distinct 'id' 
      } 
      //sqlRestriction 'timestamp < to_date(${date},'YYYYMMDDHH24MISS')' 
     } 
     eqAll 'id', subquery2 
    } 
    eqAll 'id', subquery1 
}.list() 
Смежные вопросы