【问题标题】:Grails. GORM. Error creating new instances圣杯。戈尔姆。创建新实例时出错
【发布时间】:2011-11-15 09:11:56
【问题描述】:

我已将现有的休眠映射集成到一个 grails 应用程序中。动态查找器可以正常工作,外键也可以正常解析。但我无法保存域类的新实例。

注意:我的域类中没有 id 字段,所有主键都有自定义名称(例如 carId、houseId)。由于这个 ClassName.get(id) 不起作用,为了解决这个问题,我正在使用动态查找器(例如 findByCarId)。我认为这也是创建实例的问题。 我得到的例外如下:

org.hibernate.MappingException: Unknown entity: xxx.xxx.DomainClassName

好像是entity-name参数的问题,现有的entity-name是DomainClassName,但是grails尝试查找实体xxx.xxx.DomainCalssName(全限定名)却没有找到。

一些建议?

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

    您似乎对 hbm.xml 映射的命名有问题,这与 grails 无关。您应该从这些映射中检查您的实体名称属性。 See this post 了解更多详情。

    【讨论】:

    • 问题是在更新或请求域实例时,一切正常,grails使用hbm.xml文件中指定的实体名称操作,但是在插入时,我不知道是因为什么,但他没有从映射中看到实体名称,并采用类的完全限定名称(如果缺少实体名称参数,这是休眠默认值),当然没有映射。
    【解决方案2】:

    您应该自定义 id 生成器及其映射到的列,如下所示:

    static mapping = {
       id column:'carId', type:'integer'
    }
    

    【讨论】:

    • 我可以在不触及现有 java 类及其映射的情况下执行此操作吗?
    • 所以,如果你有 java 类,你必须使用 hibernate.cfg.xml。把它放到 grails-app/conf/hibernate 目录下。您可以使用“grails create-hibernate-cfg-xml”生成此文件(请参阅 grails 文档)。不要忘记将域类的 *hbm.xml 放在同一目录中(grails-app/conf/hibernate)。
    • 我已经这样做了,我正在使用域来检索数据并更新它(问题涉及创建新实例)。你写的语句,写在哪里?
    • 此命令生成一个空的 cfg.xml 文件,没有任何映射
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2011-11-03
    相关资源
    最近更新 更多