Я пытаюсь написать генератор для углового-приложения CRUD (строительные леса, но на стороне клиента, используя угловой)Grails DefaultGrailsDomainClass.getIdentifier всегда возвращает «идентификатор в качестве идентификатора
Часть из них состоит на экстрагирование метаинформация от GORM Теперь, видимо, я ударил по твердой стене.
Я хочу обрабатывать случай, когда поле ID не генерируется, но управляется приложением. Скажем, у меня есть определение класса, как:
@Resource(readOnly = false, formats = ['json', 'xml'])
class Phone {
int age
String phoneId
String imageUrl
String name
String snippet
static mapping = {
id name: 'phoneId', generator: 'assigned'
}
static constraints = {
snippet(nullable: true, maxSize: 2000)
}
}
Я хотел бы, чтобы получить поле, служащий в качестве идентификатора для этого класса, который здесь должен быть "phoneId.
Но если спросить:
grailsApplication.getDomainClass(com.phonecat.Phone.getName()).identifier
Что я получаю взамен это свойство, называемое 'идентификатор' типа Long:
[email protected] name = 'id', type = Long, persistent = true, optional = false, association = false, bidirectional = false, association-type = [null]]
Am I неправильно используя метод getIdentifier? Есть ли что-то, что я пропустил? Или я ударил ошибку в Grails/GORM?
Для полноты, вот версия GORM я использую (насколько я могу сказать ... так что многое изменилось в последнее время на стороне Горм ...):
из build.groovy:
compile "org.grails.plugins:hibernate5"
compile "org.hibernate:hibernate-core:5.1.2.Final"
compile "org.hibernate:hibernate-ehcache:5.1.2.Final"
Кроме того, я использую Grails консоли плагин для запуска этих тестов:
runtime 'org.grails.plugins:grails-console:2.0.6'
(которые я нахожу действительно здорово) Но, наверное, то же самое можно запустить из в пределах нормы консоль командной строки.
Вот код, который я использовал:
import com.phonecat.*
println grailsApplication.getDomainClass(Phone.getName()).identifier
def d = grailsApplication.getDomainClass(Phone.getName())
println "${d.class} ${d.clazz.name} ${d.identifier}"
def pd = Phone.findAll().each {c ->
println "${c.id} ${c.phoneId}"
}
null
Возникает вопрос: предположим, что (как это происходит на самом деле быть ...), что я пишу плагин для получения мета-информации о домене класс; Как я могу получить из GORM информацию о том, что этому классу было присвоено поле «phoneId» как уникальный идентификатор, и это значение, которое я должен посмотреть при запросе ресурса через REST?
Вы пытались изменить 'String phoneId' на' String id'? Кроме того, не забудьте удалить «phoneId» из ограничений. –
@Michael_Szulc: phoneId() внутри ограничений было только для обеспечения порядка, в котором поля отображаются при использовании строительных лесов. Они действительно бесполезны для этого вопроса. Я пробовал то, что вы предлагаете, и в этом случае метод идентификатора корректно сообщает идентификатор имени «id» и тип String. НО это не решит мою проблему: я пытаюсь изменить свою модель. Я на самом деле пишу плагин, который будет получать метаинформацию моей модели (так же, поле идентификатора).Поэтому я хочу, чтобы метод получил имя поля, которое кто-либо дал как уникальный идентификатор – precchia