【问题标题】:Grails & JPA annotations + hibernate mapping files. How to get rid of this error?Grails & JPA 注释 + hibernate 映射文件。如何摆脱这个错误?
【发布时间】:2011-08-08 14:46:03
【问题描述】:

我正在尝试在我的项目中重用一些带有 JPA 注释的实体类。但不幸的是,我也是 Hibernate & JPA 的新手。当我尝试使用命令生成控制器时 “grails generate-all”我得到错误:

运行生成所有错误:错误 用名字创建bean 'messageSource':初始化 豆失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'transactionManager':无法解决 对 bean 'sessionFactory' 的引用 在设置 bean 属性时 '会话工厂';嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'sessionFactory':初始化的调用 方法失败;嵌套异常是 org.hibernate.PropertyNotFoundException: 找不到属性的设置器 类example.MyBean中的版本

有一个非常简单的解决方案:使用 getter/setter 对添加字段“版本”。但我不想更改我的实体类,因为我可能想在其他一些非 Grails 项目中重用它们。有没有办法将 JPA 注释与休眠映射文件一起使用,而无需在实体类中重复已使用的注释?

是的,而且,这是个好主意还是有更好的方法?

【问题讨论】:

    标签: hibernate jpa grails hibernate-mapping grails-domain-class


    【解决方案1】:

    您需要乐观锁定吗?我相信关闭它可以解决这个问题。

    您应该通过 hibernate 配置,全局或每个类使用 class/optimistic-lock 属性,或者您可以将 hibernate 注释添加到类,但这显然意味着更改类并假设您是使用休眠。

    您还可以使用 aop 编译器将版本字段/getter/setter 或注释编织到构建域模型中

    【讨论】:

    • 不,我不是。怎么可能禁用它?
    • 更新答案以反映评论
    【解决方案2】:

    在你的 xml 映射文件中有:

    <hibernate-mapping default-access="field">
    

    default-access(可选 - 默认为属性):Hibernate 应该使用的策略来访问所有属性。

    如果设置为field,hibernate直接读取字段,不需要getter。

    当然,您需要至少有一个字段。您不能只映射不存在的任意属性。 (好吧,也许你可以用一些“魔法”,但我建议不要这样做)

    【讨论】:

    • 该操作仍然需要在其类中添加一个版本字段
    • @vickirk 是的.. 我的假设是这种情况,但可能不是.. 这很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多