问题描述
|
我正在尝试在项目中重用带有JPA批注的某些实体类。但不幸的是,我也是Hibernate和JPA的新手。当我尝试使用命令生成控制器时
\“ grails generate-all \”我收到错误消息:
运行generate-all时出错:错误
用名字创建bean
\'messageSource \':的初始化
豆失败;嵌套异常为
org.springframework.beans.factory.BeanCreationException:
创建名称为bean的错误
\'transactionManager \':无法解析
引用bean \'sessionFactory \'
设置bean属性时
\'sessionFactory \';嵌套异常为
org.springframework.beans.factory.BeanCreationException:
创建名称为bean的错误
\'sessionFactory \':调用init
方法失败;嵌套异常为
org.hibernate.PropertyNotFoundException:
找不到财产的设定者
类example.MyBean中的版本
有一个非常简单的解决方案:在getter / setter对中添加字段“ version”。但是我不想更改我的实体类,因为可能我想在其他一些非grails项目中重用它们。有没有一种方法可以将JPA注释与休眠映射文件一起使用,而无需在实体类中重复使用已使用的注释?
是的,这是个好主意还是有更好的方法?
解决方法
您是否需要乐观锁定?我相信关闭此功能将解决此问题。
您应该使用class / optimistic-lock属性通过hibernate配置在全局或每个类的基础上进行操作,或者可以将hibernate批注添加到类中,但这显然意味着更改类并假定您正在使用hibernate。
您还可以使用aop编译器将版本文件/获取器/设置器或注释编织到构建域模型中,在您的xml映射文件中有:
<hibernate-mapping default-access=\"field\">
default-access(可选-默认为property):Hibernate应该使用该策略访问所有属性。
如果将其设置为“ 1”,休眠将直接读取字段,而无需使用吸气剂。
当然,您至少需要一个字段。您不能仅映射不存在的任意属性。 (嗯,也许您可以使用一些“魔术”,但是我建议不要这样做)