为了对我的域类对象进行验证,我需要获取验证所需的所有相关字段。
我需要的确切字段是我自己在我的域类中定义的那些而不是GORM所做的那些。
我需要知道如何获得这些字段?
我的意思是,如何在没有' id','版本'的情况下获取所有字段。和所有其他GORM生成的字段。
谢谢!
答案 0 :(得分:0)
域类实例上的constraints
属性为您提供了ConstrainedProperty
个对象的列表,这些对象表示域类中constraints
块中列出的属性,按顺序排列列出(见this documentation page的底部)。
static constraints = {
prop2()
prop1(nullable:true)
prop3(blank:true)
}
因此,如果你已经提到constraints
块中的每个属性,那么你可以使用
myObj.constraints.collect { it.propertyName }
获取属性名称列表(在上面的示例中,您将获得[prop2, prop1, prop3]
)。
答案 1 :(得分:0)
你可以做几件事。
如果你有这样的域类:
// grails-app/domain/com/demo/Person.groovy
class Person {
String firstName
String lastName
// notice that only firstName is constrained, not lastName
static constraints = {
firstName matches: /[A-Z].*/
}
}
您可以查询persistentProperties属性以获取所有持久属性的列表:
def person = new Person()
def personDomainClass = person.domainClass
// this will not include id and version...
def persistentPropertyNames = personDomainClass.persistentProperties*.name
assert persistentPropertyNames.size() == 2
assert 'firstName' in persistentPropertyNames
assert 'lastName' in persistentPropertyNames
如果你想做同样的事情但是没有Person类的实例来询问你可以做这样的事情:
def personDomainClass = grailsApplication.getDomainClass('com.demo.Person')
// this will not include id and version...
def persistentPropertyNames = personDomainClass.persistentProperties*.name
assert persistentPropertyNames.size() == 2
assert 'firstName' in persistentPropertyNames
assert 'lastName' in persistentPropertyNames
您还可以从约束Map中获取密钥:
// this will include both firstName and lastName,
// even though lastName is not listed in the constraints
// closure. GORM has added lastName to make it non
// nullable by default.
// this will not include id and version...
def constrainedPropertyNames = Person.constraints.keySet()
assert constrainedPropertyNames.size() == 2
assert 'firstName' in constrainedPropertyNames
assert 'lastName' in constrainedPropertyNames
我希望有所帮助。