Skip to content

Domain class fails to save when defining a composite ID and a multi-column unique constraint #742

@sascharitter

Description

@sascharitter

A domain class defining a composite ID and a multi-column unique constraint fails to save in an integration test.

Excerpt from that domain class:

String firstName, lastName

static mapping = {
    id composite: ['firstName', 'lastName']
}

static constraints = {
    firstName(unique: ['lastName'])
}

The integration test fails with the following exception:

org.grails.core.exceptions.GrailsRuntimeException: Target of [unique] constraints [composite.id.unique.UniqueWithCompositeId : (unsaved)] is not a domain instance. Unique constraint can only be applied to domain classes and not custom user types or embedded instances
    at org.grails.orm.hibernate.validation.UniqueConstraint.processValidate(UniqueConstraint.java:142)
    at grails.validation.AbstractConstraint.validate(AbstractConstraint.java:107)
    at grails.validation.ConstrainedProperty.validate(ConstrainedProperty.java:979)
    at org.grails.validation.GrailsDomainClassValidator.validatePropertyWithConstraint(GrailsDomainClassValidator.java:211)
    at org.grails.validation.GrailsDomainClassValidator.validate(GrailsDomainClassValidator.java:81)
    at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.save(AbstractHibernateGormInstanceApi.groovy:122)
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:151)

The multi-column unique constraint works if no composite ID is defined in the domain class.

I attached a sample project showing both cases with one integration test each.

composite-id-unique-bug-report-06072016.zip

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions