Как заставить Grails GORM соблюдать схему БД? - PullRequest
2 голосов
/ 14 мая 2010

У меня есть два домена:

class CodeSet { 

  String id
  String owner
  String comments
  String geneRLF
  String systemAPF

  static hasMany = [cartridges:Cartridge]

    static constraints = {
      id(unique:true,blank:false)
    }

    static mapping = {
      table 'code_set'
      version false
      columns {
         id column:'code_set_id', generator: 'assigned'
         owner column:'owner'
         comments column:'comments'
         geneRLF column:'gene_rlf'
         systemAPF column:'system_apf'
      }
  }

and :

class Cartridge {

  String id
  String code_set_id
  Date runDate

  static belongsTo = CodeSet

    static constraints = {
      id(unique:true,blank:false)
    }

      static mapping = {
      table 'cartridge'
      version false
      columns {
         id column:'cartridge_id', generator: 'assigned'
         code_set_id column:'code_set_id'
         runDate column:'run_date'
      }
  }

На самом деле, с этими моделями я получаю таблицы:
- code_set,
- картридж,
- и таблица: code_set_cartridge (два поля: code_set_cartridges_id, картридж_id)

Я бы не хотел иметь таблицу code_set_cartridge, но сохранить отношения:
code_set -> 1: n -> картридж

Другими словами, как я могу сохранить связь между code_set и картриджем без промежуточной таблицы? (используя code_set_id в качестве первичного ключа в code_set и code_set_id в качестве внешнего ключа в картридже).

Отображение с помощью GORM можно выполнить без промежуточной таблицы?

Ответы [ 2 ]

5 голосов
/ 15 мая 2010

Работает, если вы измените объявление ownTo. Вместо того, чтобы просто ссылаться на идентификатор CodeSet, вы можете дать имя экземпляру в ownTo, и вы получите ссылку на экземпляр и избежите таблицы соединения. Я также удалил избыточные сопоставления:

class Cartridge {

   String id
   Date runDate

   static belongsTo = [codeSet: CodeSet]

   static mapping = {
      version false
      id generator: 'assigned'
      codeSet column:'code_set_id'
   }
}

class CodeSet { 

   String id
   String owner
   String comments
   String geneRLF
   String systemAPF

   static hasMany = [cartridges:Cartridge]

   static mapping = {
      version false
      id generator: 'assigned'
      geneRLF column:'gene_rlf'
      systemAPF column:'system_apf'
   }
}
1 голос
/ 15 мая 2010

Я использовал двунаправленный режим «один ко многим», но я также могу использовать однонаправленный режим.

Итак, для доменного CodeSet исправление:

class CodeSet { 

  String id
  String owner
  String comments
  String geneRLF
  String systemAPF

  Cartridge cartridge

    static constraints = {
      id(unique:true,blank:false)
    }

    static mapping = {
      table 'code_set'
      version false
      id column:'code_set_id', generator: 'assigned'
      columns {
         owner:'owner'
         comments:'comments'
         geneRLF:'gene_rlf'
         systemAPF:'system_apf'
      }
  }

Но я все еще путаю с двунаправленным и однонаправленным режимом?
Кто-нибудь, можете показать мне хороший пример (чтобы помочь мне понять)? Спасибо

...