如何在单个Collection中获取grails Domain Class的所有持久属性及其约束?

问题描述 投票:1回答:3

我需要获取有关特定Grails域类的所有信息,即持久属性和与它们相关的约束。我怎么做?

java grails gorm
3个回答
2
投票

下面给你一个地图,其中属性名称为键,约束地图为值,在Grails 3中有效:

def d = new DefaultGrailsDomainClass(MyDomain.class)

def pp = d.persistentProperties.collectEntries {
    [it.name, d.constrainedProperties[it.name]?.appliedConstraints ]
}

3
投票

从grails 3.3开始,接受的答案不再正确。 DefaultGrailsDomainClass现已弃用,单个参数构造函数将抛出一个异常,即尚未初始化mappingContext。

注入grailsDomainClassMappingContext豆并获得PersistentEntity

def persistentEntity = grailsDomainClassMappingContext.getPersistentEntity(MyDomain.class.name)
def propertyList = persistentEntity.getPersistentProperties()

1
投票

我在Grails 3.3.9上使用此解决方案:

1)autowire这个属性

MappingContext grailsDomainClassMappingContext

2)检索propertyListconstrainedProperties

ConstrainedDiscovery constrainedDiscovery = GrailsFactoriesLoader.loadFactory(ConstrainedDiscovery.class);
PersistentEntity crlPe = grailsDomainClassMappingContext.getPersistentEntity(MyDomain.name)

def propertyList = persistentEntity.getPersistentProperties()
Map constrainedProperties = constrainedDiscovery.findConstrainedProperties(crlPe);

此外,documentation声明你应该能够通过调用这个来检索约束:

MyDomain.constrainedProperties

它确实有效,但在日志中有一个恼人的警告。此解决方案可以很容易地使用日志消息抑制:

logger("org.grails.core.DefaultGrailsDomainClass", ERROR)
© www.soinside.com 2019 - 2024. All rights reserved.