Grails

Embedded UserTypes written in Java cause exception in Grails domain binding

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Not A Bug
  • Affects Version/s: 1.0.3
  • Fix Version/s: 1.0.4
  • Component/s: Persistence
  • Labels:
    None

Description

GrailsDomainConfigurationUtil expects to be able to cast UserType implementations to GroovyObject which is not possible if the UserType is written in Java. For example:

class PersistentThing {

    org.joda.time.DateTime timestamp

    static embedded = ['timestamp']
    static mapping = {
        timestamp type: org.joda.time.contrib.hibernate.PersistentDateTimeTZ
    }
}

Causes the stack trace:

java.lang.ClassCastException: org.joda.time.DateTime cannot be cast to groovy.lang.GroovyObject
        at org.codehaus.groovy.grails.commons.GrailsDomainConfigurationUtil.evaluateConstraints(GrailsDomainConfigurationUtil.java:319)
        at org.codehaus.groovy.grails.commons.DefaultGrailsDomainClassProperty$ComponentDomainClass.<init>(DefaultGrailsDomainClassProperty.java:496)
        at org.codehaus.groovy.grails.commons.DefaultGrailsDomainClassProperty.setEmbedded(DefaultGrailsDomainClassProperty.java:442)
        at org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass.establishDomainClassRelationship(DefaultGrailsDomainClass.java:455)
        at org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass.establishRelationships(DefaultGrailsDomainClass.java:241)
        at org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass.<init>(DefaultGrailsDomainClass.java:98)
        at org.codehaus.groovy.grails.commons.DomainClassArtefactHandler.newArtefactClass(DomainClassArtefactHandler.java:34)
        at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:653)
        at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.configureLoadedClasses(DefaultGrailsApplication.java:331)
        at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.initialise(DefaultGrailsApplication.java:859)

Activity

Hide
Graeme Rocher added a comment -

Remove the line

static embedded = ['dateTime']

Only GORM domain classes can be embedded, not user types

Show
Graeme Rocher added a comment - Remove the line static embedded = ['dateTime'] Only GORM domain classes can be embedded, not user types

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: