Как исключить некоторые столбцы с GORM с помощью динамических искателей? - PullRequest
3 голосов
/ 02 августа 2011

У меня есть следующий объект домена :

 class DbDeployment 
 { 
   static constraints = { 
    startDate(nullable: false) 
    endDate(nullable: true) 
    username(nullable: true) 
    fabric(nullable: false) 
    description(nullable: true) 
    status(nullable: true) 
    details(nullable: true) 
   } 

   static mapping = { 
    columns { 
     details type: 'text' 
     } 
   } 

  Date startDate = new Date() 
  Date endDate 
  String username 
  String fabric 
  String description 
  String status 
  String details // xml representation of the plan 
} 

Я бы хотел выполнить запрос, подобный следующему:

DbDeployment.findAllByFabric("f1", params)

, но я бы хотел убедиться, что столбец details (который потенциально огромен) не найден.

Есть ли способ сделать это?

1 Ответ

6 голосов
/ 02 августа 2011

Вариант 1: Создать связь для больших полей данных

Одно предложение из этого ответа состоит в том, чтобы разбить свойство больших данных наотдельный домен, который заставит его загружаться лениво.Пример:

class DbDeployment {
    Date startDate = new Date()
    Date endDate
    ...
    DbDeploymentDetails details
}

class DbDeploymentDetails {
    String details
    static belongsTo = DbDeployment
}

Вариант 2. Использование нового домена + сопоставление с исходной таблицей

ответ на другой вопрос ссылки наa Вопрос списка рассылки Grails , на который есть отличный ответ Burt Beckwith , но ответ SO не дает примера.Ради потомков я приведу его пример из списка рассылки и выложу его здесь.

Он включает создание другого класса домена без большого поля, а затем использование его закрытия static mapping для сопоставления с другимтаблица домена.

class DbDeployment {
    Date startDate = new Date()
    Date endDate
    ...
    String details
}

class SimpleDbDeployment {
    Date startDate = new Date()
    Date endDate
    ...
    // do not include String details

    static mapping = {
        table 'db_deployment'
    }
}

Тогда вы можете просто использовать средства поиска в SimpleDbDeployment:

SimpleDbDeployment.findAllByFabric('f1', params)

Burt, было бы здорово, если бы вы ответили своим примеромиз списка рассылки;Я вырежу это из моего и возбуждаю ваше, так как вы заслуживаете кредита.

...