Я использую Grails v3.2.9
У меня есть 2 класса домена (класс A
и класс B
), имеющие некоторые общие свойства.Я создал новый класс C
, извлек общие свойства из A
и B
в C
и сделал A
и B
для расширения C
, как показано ниже:
class A extends C {
String x
static constraints = {}
}
class B extends C {
String y
static constraints = {}
}
class C {
String z
static constraints = {}
static mapping = {
tablePerConcreteClass true
}
}
Я хочу, чтобы C
отражал JPA @MappedSuperClass
, поэтому я проверил документацию для grails v3.1.12 и обнаружил около tablePerConcreteClass
, что, как представляется, именно то, что мне нужно, однако в документация для Grails v3.2.9 там есть примечание о tablePerConcreteClass
, и я даже не уверен, поддерживается ли эта стратегия Grails 3.2.9 или нет.
В любом случае я пытался использовать tablePerConcreteClass
с моим grails v3.2.9 и получил следующее исключение:
org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.grails.orm.hibernate.HibernateDatastore]: исключение конструктора;вложенное исключение: org.hibernate.MappingException: org.hibernate.dialect.MySQL5Dialect не поддерживает последовательности
Я видел несколько решений для создания родительского класса в пакете src/groovy
и его абстрактного представления, ноэто не то, что мне нужно, я хочу, чтобы родительский класс также был классом домена, чтобы можно было записывать ограничения и в одном месте.
ОБНОВЛЕНИЕ ***** Также я узналчто если я сделаю C
абстрактным, вставлю в него отношение и сделаю A
для его расширения следующим образом:
abstract class C {
Bar bar
static constraints = {}
}
class A extends C {
String x
static constraints = {}
}
, тогда искусственное свойство barId
, позволяющее получить идентификатор отношениябез загрузки, не создается grails, поэтому использование A.get(1).barId
приводит к groovy.lang.MissingPropertyException
.В отличие от этого, если мы помещаем отношение Bar bar
в подкласс A
, то создается искусственное свойство barId
, поэтому, пожалуйста, укажите решение этой проблемы, если оно есть.