diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 2c30fe4f..f7d23bfa 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -39,14 +39,12 @@ jobs: uses: actions/setup-java@v1 with: java-version: ${{ matrix.java }} - - name: Optional setup step - run: | - [ -f ./setup.sh ] && ./setup.sh || true - name: Run all tests (chromeHeadless) except spring-boot run: ./gradlew -Dgeb.env=chromeHeadless check --no-daemon -x gorm-hibernate5-spring-boot:test - name: Run Spring Boot Tests run: ./gradlew gorm-hibernate5-spring-boot:test --no-daemon - name: Publish Test Report + if: failure() uses: scacap/action-surefire-report@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/AbstractHibernateGormInstanceApi.groovy b/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/AbstractHibernateGormInstanceApi.groovy index 7dc55401..f8c6c71e 100644 --- a/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/AbstractHibernateGormInstanceApi.groovy +++ b/grails-datastore-gorm-hibernate5/src/main/groovy/org/grails/orm/hibernate/AbstractHibernateGormInstanceApi.groovy @@ -390,7 +390,7 @@ abstract class AbstractHibernateGormInstanceApi extends GormInstanceApi { setObjectToReadOnly target if (entity) { for (Association association in entity.associations) { - if (association instanceof ToOne) { + if (association instanceof ToOne && !association instanceof Embedded) { if(proxyHandler.isInitialized(target, association.name)) { def bean = new BeanWrapperImpl(target) def propertyValue = bean.getPropertyValue(association.name) diff --git a/grails-datastore-gorm-hibernate5/src/test/groovy/grails/gorm/tests/validation/EmbeddedWithValidationExceptionSpec.groovy b/grails-datastore-gorm-hibernate5/src/test/groovy/grails/gorm/tests/validation/EmbeddedWithValidationExceptionSpec.groovy new file mode 100644 index 00000000..6d410aa2 --- /dev/null +++ b/grails-datastore-gorm-hibernate5/src/test/groovy/grails/gorm/tests/validation/EmbeddedWithValidationExceptionSpec.groovy @@ -0,0 +1,54 @@ +package grails.gorm.tests.validation + +import grails.gorm.annotation.Entity +import grails.gorm.transactions.Rollback +import grails.validation.ValidationException +import org.grails.orm.hibernate.HibernateDatastore +import spock.lang.AutoCleanup +import spock.lang.Issue +import spock.lang.Shared +import spock.lang.Specification + +class EmbeddedWithValidationExceptionSpec extends Specification { + @Shared @AutoCleanup HibernateDatastore hibernateDatastore = new HibernateDatastore(DomainWithEmbedded) + + @Rollback + @Issue("https://github.com/grails/gorm-hibernate5/issues/110") + void "test validation exception with embedded in domain"() { + when: + new DomainWithEmbedded( + foo: 'not valid', + myEmbedded: new MyEmbedded( + a: 1, + b: 'foo' + ) + ).save(failOnError: true) + + then: + thrown(ValidationException) + } +} + +@Entity +class DomainWithEmbedded { + MyEmbedded myEmbedded + String foo + + static embedded = ['myEmbedded'] + + static constraints = { + foo(validator: { val, self -> + return 'not.valid.foo' + }) + } +} + +class MyEmbedded { + Integer a + String b + + static constraints = { + a(nullable: true) + b(nullalbe: true) + } +} \ No newline at end of file diff --git a/grails-datastore-gorm-hibernate5/src/test/groovy/org/grails/orm/hibernate/connections/DataSourceConnectionSourceFactorySpec.groovy b/grails-datastore-gorm-hibernate5/src/test/groovy/org/grails/orm/hibernate/connections/DataSourceConnectionSourceFactorySpec.groovy index 06158a37..149348be 100644 --- a/grails-datastore-gorm-hibernate5/src/test/groovy/org/grails/orm/hibernate/connections/DataSourceConnectionSourceFactorySpec.groovy +++ b/grails-datastore-gorm-hibernate5/src/test/groovy/org/grails/orm/hibernate/connections/DataSourceConnectionSourceFactorySpec.groovy @@ -16,7 +16,7 @@ class DataSourceConnectionSourceFactorySpec extends Specification { when: DataSourceConnectionSourceFactory factory = new DataSourceConnectionSourceFactory() Map config = [ - 'dataSource.url':"jdbc:h2:mem:grailsDB;MVCC=TRUE;LOCK_TIMEOUT=10000", + 'dataSource.url':"jdbc:h2:mem:dsConnDsFactorySpecDb;MVCC=TRUE;LOCK_TIMEOUT=10000", 'dataSource.dbCreate': 'update', 'dataSource.dialect': Oracle8iDialect.name, 'dataSource.properties.dbProperties': [useSSL: false]