При определении уникального ограничения для класса домена grails генерирует для базы данных имя-ограничение, основанное на имени свойства. При использовании Postgres в качестве базы данных имя будет «unique_language» для следующего определения ограничения.Генерация повторяющихся уникальных имен ограничений
static constraints = {
language nullable: false, unique: 'product'
}
Когда у меня теперь есть второй класс домена, который имеет также уникальное ограничение на свойство с таким же именем, Grails снова создать базу данных ограничений с именем «unique_language». Проблема в том, что для Postgres имя для уникального ограничения также должно быть уникальным для схемы базы данных. Это означает, что в нашем случае второе ограничение не применяется к базе данных.
Есть ли способ настроить или определить уникальные имена индексов?
Я смотрел, можно ли улучшить NamingStrategy, но я не мог найти точку, где можно было бы сделать изменения.
настоящее время мы используем Grails 2.4.4
это может дать вам ключ http://stackoverflow.com/questions/35220475/spring-boot-hibernate-grails-ignores-ddlauto -in-yml-файл обсуждался здесь http://stackoverflow.com/questions/28168611/postgres-unique-constraint-on-index-does-not-work – Vahid
@vahid: Я не думаю, что это та же проблема , Здесь проблема в том, что имена уникальных ограничений должны быть уникальными для всей базы данных, но grails или hibernate просто создает такой ключ: 'unique_propertyname'. Это, очевидно, терпит неудачу, если у вас есть несколько классов домена со свойствами, которые называются одинаковыми и что все имеют уникальные ограничения. – deflomu