Grails 3.2 - 列出域 class 中不可为空的字段名称
Grails 3.2 - List field names in domain class that are not nullable
如何获取不可为空的域 class 的字段名称列表?
例如,在以下域中:
class MyDomain {
String field1
String field2
String field3
String field4
static constraints = {
field2 nullable: true
field3 nullable: true
}
}
如何在控制器中取回列表 ['field1','field4']
?
我正在验证 CSV 中的行,有些行信息与存储在域中的信息不同,因此最好获取字符串名称列表而不是绑定到命令对象排除项。
您需要使用 PersistentEntity API
Set<String> propertyNames = [] as Set
for (PersistentProperty prop: MyDomain.gormPersistentEntity.persistentProperties) {
if (!prop.mapping.mappedForm.nullable) {
propertyNames.add(prop.name)
}
}
您可能需要根据需要排除版本或时间戳属性等内容。
可以使用constrainedProperties
。它给出了特定域的所有约束 class。
现在您只需要非空约束,然后过滤掉它的结果。
示例:
MyDomain.constrainedProperties.findResults { it.value.nullable ? null : it.key }
输出:
['field1','field4']
For grails 2.x users :
MyDomain.getConstraints().findResults { it.value.nullable ? null : it.key
}
如何获取不可为空的域 class 的字段名称列表?
例如,在以下域中:
class MyDomain {
String field1
String field2
String field3
String field4
static constraints = {
field2 nullable: true
field3 nullable: true
}
}
如何在控制器中取回列表 ['field1','field4']
?
我正在验证 CSV 中的行,有些行信息与存储在域中的信息不同,因此最好获取字符串名称列表而不是绑定到命令对象排除项。
您需要使用 PersistentEntity API
Set<String> propertyNames = [] as Set
for (PersistentProperty prop: MyDomain.gormPersistentEntity.persistentProperties) {
if (!prop.mapping.mappedForm.nullable) {
propertyNames.add(prop.name)
}
}
您可能需要根据需要排除版本或时间戳属性等内容。
可以使用constrainedProperties
。它给出了特定域的所有约束 class。
现在您只需要非空约束,然后过滤掉它的结果。
示例:
MyDomain.constrainedProperties.findResults { it.value.nullable ? null : it.key }
输出:
['field1','field4']
For grails 2.x users :
MyDomain.getConstraints().findResults { it.value.nullable ? null : it.key
}