Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 圣杯;JPA注释+;休眠映射文件。如何消除这个错误?_Hibernate_Jpa_Grails_Hibernate Mapping_Grails Domain Class - Fatal编程技术网

Hibernate 圣杯;JPA注释+;休眠映射文件。如何消除这个错误?

Hibernate 圣杯;JPA注释+;休眠映射文件。如何消除这个错误?,hibernate,jpa,grails,hibernate-mapping,grails-domain-class,Hibernate,Jpa,Grails,Hibernate Mapping,Grails Domain Class,我试图在我的项目中重用一些带有JPA注释的实体类。但不幸的是,我也是Hibernate&JPA的新手。当我尝试使用命令生成控制器时 “grails生成所有”我得到错误: 运行generate all时出错:错误 创建名为的bean “messageSource”:的初始化 bean失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建名为的bean时出错 “transactionManager”:无法解析 对bea

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

运行generate all时出错:错误 创建名为的bean “messageSource”:的初始化 bean失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建名为的bean时出错 “transactionManager”:无法解析 对bean“sessionFactory”的引用 在设置bean属性时 “会话工厂”;嵌套异常是 org.springframework.beans.factory.BeanCreationException: 创建名为的bean时出错 “sessionFactory”:调用init 方法失败;嵌套异常是 org.hibernate.PropertyNotFoundException: 找不到属性的setter 类中的版本example.MyBean

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


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

在xml映射文件中有:

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

默认访问(可选-默认为属性):Hibernate用于访问所有属性的策略

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


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

你需要乐观锁定吗?我相信把它关掉会治好的

您应该通过hibernate配置,使用class/optimistic lock属性全局或按类执行,或者您可以向类添加hibernate注释,但这显然意味着更改类,并假设您正在使用hibernate


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

op仍然需要将版本字段添加到其class@vickirk对我的假设是这样的,但事实可能并非如此。。这会很奇怪。不,我不是。如何禁用它?更新答案以反映评论