как сделать взаимно-однозначные отношения в граалях? - PullRequest
1 голос
/ 25 декабря 2010

У меня есть два класса домена, и я хочу иметь двунаправленное отношение один к одному. Я пишу:


class Person {

  Book book;

  String name
  Integer age
  Date lastVisit

  static constraints = {
    book unique: true  // "one-to-one". Without that = "Many-to-one".
  }

}
 


class Book {

  String title
  Date releaseDate
  String ISBN

  static belongsTo = [person:Person] // it makes relationship bi-directional regarding the grails-docs 
}


 

Итак, я хочу иметь двунаправленный адрес, я не могу найти ссылку из Книги на Персона в сгенерированном SQL:


CREATE TABLE `book` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `version` bigint(20) NOT NULL,
  `isbn` varchar(255) NOT NULL,
  `release_date` datetime NOT NULL,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

Так значит ли это, что это не двунаправленный? Как сделать двунаправленный?

Ответы [ 2 ]

3 голосов
/ 27 декабря 2010

проверьте свойство hasOne, в каком классе вы определяете hasOne, адом, в зависимости от того, где вы хотите хранить FK, проверьте этот документ Grails относительно hasOne: http://www.grails.org/doc/latest/ref/Domain%20Classes/hasOne.html

1 голос
/ 29 мая 2013

Чтобы сделать это отношение один к одному двунаправленным, вы должны определить их как пары

     //Person is the owning side of relationship
     class Person {

      //a foreign key will be stored in Book table called person_id
      static hasOne = [book:Book]

      static constraints = {
        book unique: true
      }  
    }

    Class Book{
     Person person
    }

ownTo используется для указания стороны владельца (которая управляет отношениями) отношения «один ко многим», «многие к одному» или «многие ко многим», а также для установления двунаправленных отношений

ownTo следует всегда использовать на своей стороне

...