1

我有两个域。

class ABC{

    String xyz

    static mapping = {
        discriminator column: 'ABC_TYPE_ID'
    }
}

class XYZ extends ABC{

    static mapWith = "none"

    static mapping = {
        discriminator value: 3
    }   
}

在 Grails 2.5.5 中,下面的行工作得很好,但是在进行了所需的更改后,它在 Grails-3.2.4 中不起作用并且给出了 null。

Mapping mapping = new GrailsDomainBinder().getMapping(XYZ) //Works fine Grails 2.5.5

Mapping mapping = GrailsDomainBinder.getMapping(XYZ) // Giving null in Grails-3.2.4

请帮助我从 XYZ 域获取映射对象。

我的发现:

我在 application.yml 中使用带有注释#dbCreate:''的 oracle db 。

在 XYZ 域中评论static mapWith = "none"后,我得到了 Mapping 对象,并且由于#dbCreate:'' ,因此未在 DB 中创建相应的表。

这种方法有什么问题吗?如果是,请为我提供替代解决方案。

4

1 回答 1

1

在最新版本的 GORM 中,静态部分已被删除。您需要使用该MappingContext对象来获得您想要的东西:

MappingContext mappingContext = .. // can be injected via Spring
Mapping mapping = (Mapping)mappingContext.getPersistentEntity(Foo).mapping.mappedForm

http://gorm.grails.org/latest/hibernate/api/org/grails/datastore/mapping/model/MappingContext.html

于 2017-02-01T14:49:45.907 回答