Retrieving a list of GORM persistent properties for a domain

前端 未结 3 1720
鱼传尺愫
鱼传尺愫 2020-12-08 00:47

What\'s the best/easiest way to get a list of the persistent properties associated with a given GORM domain object? I can get the list of all properties, but this list cont

相关标签:
3条回答
  • 2020-12-08 01:11

    Try this:

    import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass
    ...
    def d = new DefaultGrailsDomainClass(YourDomain.class)
    d.persistentProperties
    

    Here's a link to the Grails API for GrailsDomainClass (it's a link to an older version; I couldn't find a newer one after some quick searches). It's got a getPersistentProperties() (used in the code snippet above). You can traverse the API documentation to see what other methods might be useful to you.

    If you want an example, do a grails install-templates and then look at src/templates/scaffolding/create.gsp. There's a block in there where it iterates over the persistent domain properties.

    0 讨论(0)
  • 2020-12-08 01:20

    As of grails 3.3.0

    All code that uses the GrailsDomainClass or GrailsDomainClassProperty classes should be re-written to use the mapping context api.

    To get started, inject the grailsDomainClassMappingContext bean. See the api documentation for more information on the MappingContext, PersistentEntity (GrailsDomainClass), and PersistentProperty(GrailsDomainClassProperty)

    For example:

    class MyService {
        def grailsDomainClassMappingContext //inject
    
        def accessDomainProperties(Class clazz) {
            PersistentEntity entityClass = grailsDomainClassMappingContext.getPersistentEntity(clazz.name)
            List<PersistentProperty> persistentPropertyList = entityClass.persistentProperties
            persistentPropertyList.each { property ->
                println property.name
            }
        }
    }
    

    Hope this helps someone.

    0 讨论(0)
  • 2020-12-08 01:30

    Now (strarting Grails 2.x) you don't even have to instantiate new DefaultGrailsDomainClass(...) and avoid unnecessary code executions. All domain class objects have injected property domainClass:

    def domainObject = new YourDomain()
    domainObject.domainClass.persistentProperties
    

    Or, if you haven't domain class object, you can get DefaultGrailsDomainClass from application context by domain class name - each domain class has a DefaultGrailsDomainClass registered as a Spring bean. So you can use, for example, Holders (assuming your domain class name is 'Foo'):

    def defaultGrailsDomainClass = Holders.applicationContext.getBean("FooDomainClass")
    defaultGrailsDomainClass.persistentProperties
    
    0 讨论(0)
提交回复
热议问题