0

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

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

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

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

4

2 回答 2

1

在您的 xml 映射文件中有:

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

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

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

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

于 2011-04-19T11:43:27.687 回答
1

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

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

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

于 2011-04-19T11:51:22.323 回答