随着Google提供新服务-Google Cloud Sql,我决定将gwt + jpa + hibernate + spring + maven Web应用程序迁移到gae。 所以我在本地和gae上启动我的应用程序时遇到问题。 我由此造成创建dao bean时出错: 通用标签

在我看来,我使用的是jpa-1.0而不是带有hibernate的jpa-2.0(因为jpa 1.0缺少方法:

getValidationMode()

我检查了我的库...一切正常-将jpa 2.0与hibernate-jpa-2.0-api.jar一起使用。 但是我发现了一个问题: 当我使用不带gae的代码并且使用另一个数据库时,一切都可以。事实是,appengine sdk包含其自己的JPA,版本是1.0(此处引述将JPA与App Engine一起使用

JPA和数据存储JAR包含在App Engine Java SDK中。您可以在appengine-java-sdk / lib / user / orm /目录中找到它们。 将JAR复制到应用程序的war / WEB-INF / lib /目录中。

应用程序启动时,它使用的是来自appengine sdk的jpa 1.0(在javax.persistence.spi.PersistenceUnitInfo中没有方法getValidationMode()),而不是我的。

那么,如何解决这个问题以使我的应用使用正确的罐子? 这也是我的persistence.xml: 通用标签

有帮助吗?

解决方案

Hibernate JPA支持存在一些问题,因为它使用了JPA 2.0规范。但是Google App Engine仅支持JPA1.0规范。我也遇到了同样的问题,因为我使用了Spring Hibernate支持(而不是Hibernate JPA)。

对于您的问题,我也认为最好使用Spring Hibernate支持。

其他提示

您应该使用旧版本的hibernate(与jpa 1兼容)。GAE将这些东西强加给您。实际上,我不知道它是否支持JPA-我认为仅支持JDO。

我不明白为什么要在persistence.xml中定义用户名和密码。

我认为您不需要这些凭据,因为Google SQL Cloud的控制台管理(您在其中指定允许的应用程序ID)会限制应用程序对数据库的访问。

如果您使用的是eclipse,我认为Java的GAE项目只是将GAE jar复制到WEB-INF \ lib,从DataNucleus和Geronimo中删除JPA jar,然后复制您的Hibernate jar。 我从没尝试过这个。

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top