如何在单个集合中获取 grails Domain Class 的所有持久属性及其约束?
How to get all the persistent properties of a grails Domain Class along with their constraints in a single Collection?
我需要获取有关特定 Grails 域的所有信息 class,即在单个集合中的持久属性和与它们相关的约束。我怎么做?
以下内容为您提供一个以 属性 名称作为键并以约束映射作为值的映射,适用于 Grails 3:
def d = new DefaultGrailsDomainClass(MyDomain.class)
def pp = d.persistentProperties.collectEntries {
[it.name, d.constrainedProperties[it.name]?.appliedConstraints ]
}
从 grails 3.3 开始,接受的答案不再正确。 DefaultGrailsDomainClass
现已弃用,单参数构造函数将抛出 mappingContext 尚未初始化的异常。
注入 grailsDomainClassMappingContext
bean 并使用
获取 PersistentEntity
def persistentEntity = grailsDomainClassMappingContext.getPersistentEntity(MyDomain.class.name)
def propertyList = persistentEntity.getPersistentProperties()
我在 Grails 3.3.9 上使用这个解决方案:
1) 自动装配这个属性
MappingContext grailsDomainClassMappingContext
2) 检索 propertyList
和 constrainedProperties
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)
Grails 4.x
def persistentEntity = grailsApplication.mappingContext.getPersistentEntity(object.getClass().getName())
对于 Grails 4
List<PersistentProperty> props = Holders
.grailsApplication
.mappingContext
.getPersistentEntity(object.class.name)
.persistentProperties
我需要获取有关特定 Grails 域的所有信息 class,即在单个集合中的持久属性和与它们相关的约束。我怎么做?
以下内容为您提供一个以 属性 名称作为键并以约束映射作为值的映射,适用于 Grails 3:
def d = new DefaultGrailsDomainClass(MyDomain.class)
def pp = d.persistentProperties.collectEntries {
[it.name, d.constrainedProperties[it.name]?.appliedConstraints ]
}
从 grails 3.3 开始,接受的答案不再正确。 DefaultGrailsDomainClass
现已弃用,单参数构造函数将抛出 mappingContext 尚未初始化的异常。
注入 grailsDomainClassMappingContext
bean 并使用
PersistentEntity
def persistentEntity = grailsDomainClassMappingContext.getPersistentEntity(MyDomain.class.name)
def propertyList = persistentEntity.getPersistentProperties()
我在 Grails 3.3.9 上使用这个解决方案:
1) 自动装配这个属性
MappingContext grailsDomainClassMappingContext
2) 检索 propertyList
和 constrainedProperties
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)
Grails 4.x
def persistentEntity = grailsApplication.mappingContext.getPersistentEntity(object.getClass().getName())
对于 Grails 4
List<PersistentProperty> props = Holders
.grailsApplication
.mappingContext
.getPersistentEntity(object.class.name)
.persistentProperties