как я могу избежать увеличения верификации путем добавления отношений?

#grails

#grails

Вопрос:

у меня есть следующая схема класса домена:

 class A { static hasMany=[abRelations: AB] }
class B { static hasMany=[abRelations: AB] }
//relation table
class AB{
 A a
 B b
 String someAttribute
}
  

в некоторых случаях мне определенно нужна ассоциация сокращений, например, запросы hql, критерии, …

моя проблема в том, что когда я создаю новую запись AB с

 new AB(a: a, b: b, someAttribute: "hello").save()
  

поля версий A и B увеличиваются. могу ли я избежать этого, добавив специальную опцию сопоставления или что-то в этомроде? я использую событие afterUpate в некоторых классах, и это событие также запускается при добавлении новых отношений -> это моя главная проблема!

Ответ №1:

Вы можете полностью удалить поле версии, добавив следующее в класс домена

 static mapping = {
  version false
}
  

Я понимаю, что нет способа осуществлять детальный контроль над тем, когда version поле увеличивается. У вас либо есть version поле, и оно автоматически увеличивается при каждом обновлении объекта домена, либо у вас его вообще нет.

Комментарии:

1. спасибо за ответ, я подумал, что, вероятно, есть другое решение. я не хочу терять функциональность оптимистичной блокировки, удаляя поля версии из A и B. лучшим решением для моей проблемы было бы вызвать код при последующем закрытии вручную.

Ответ №2:

Если вы не хотите увеличивать версии A и B, сохраняйте однонаправленные отношения, чтобы A и B не знали об отношениях AB.

Комментарии:

1. спасибо, но мне нужны отношения для выполнения запросов и критериев hql. в противном случае вы получили бы hibernate path execption для этих отсутствующих ассоциаций.