Grails 3.2 - 列出域类中不可为空的字段名称

时间:2017-08-01 02:36:11

标签: grails gorm

如何获取不可为空的域类的字段名列表?

例如,在以下域中:

class MyDomain {
    String field1
    String field2
    String field3
    String field4

    static constraints = {
        field2 nullable: true
        field3 nullable: true
    }
}

如何在控制器中找回列表['field1','field4']

我在验证CSV中的行,并且某些行信息与域中存储的行不同,因此最好获取字符串列表而不是绑定到命令对象排除。

2 个答案:

答案 0 :(得分:1)

您可以使用constrainedProperties。它给出了特定域类的所有约束。

现在你只想要非nullble约束,然后过滤掉它的结果。

示例:

MyDomain.constrainedProperties.findResults { it.value.nullable ? null : it.key }

输出:

['field1','field4']
  

对于grails 2.x用户:

MyDomain.getConstraints().findResults { it.value.nullable ? null : it.key}

答案 1 :(得分:0)

您需要使用PersistentEntity API

Set<String> propertyNames = [] as Set
for (PersistentProperty prop: MyDomain.gormPersistentEntity.persistentProperties) {
    if (!prop.mapping.mappedForm.nullable) {
        propertyNames.add(prop.name)
    }     
}

您可能必须根据需要排除版本或时间戳属性等内容。