JPA + Hibernate Google Cloud Sql
-
27-10-2019 - |
Вопрос
Когда Google представил новую службу - Google Cloud Sql, я решил перенести веб-приложение gwt + jpa + hibernate + spring + maven на gae. Так что у меня проблема при запуске приложения локально и на gae. У меня возникла ошибка при создании компонента dao, вызванная следующим:
родовое словоМне показалось, что я использовал jpa-1.0 вместо jpa-2.0 со спящим режимом (из-за отсутствия метода jpa 1.0:
<цитата>getValidationMode ()
Я проверил свои библиотеки ... все в порядке - использую jpa 2.0 с hibernate-jpa-2.0-api.jar. Но я нашел промлем: Когда я использую свой код без gae и использую другой db, все в порядке. Дело в том, что appengine sdk включает собственный JPA, а его версия - 1.0 (цитата отсюда Использование JPA с App Engine )
<цитата>JPA и JAR хранилища данных включены в SDK Java App Engine. Вы можете найти их в каталоге appengine-java-sdk / lib / user / orm /. Скопируйте файлы JAR в каталог war / WEB-INF / lib / вашего приложения.
Когда приложение запускается, оно использует jpa 1.0 (без метода getValidationMode () в javax.persistence.spi.PersistenceUnitInfo) из appengine sdk вместо моего.
Итак, как мне решить эту проблему, чтобы мое приложение использовало правильные jar-файлы? Вот и мой файл persistence.xml:
родовое словоРешение
Есть некоторая проблема с поддержкой Hibernate JPA, потому что он использовал спецификацию JPA 2.0.Но Google App Engine поддерживает только спецификацию JPA1.0.У меня тоже была такая же проблема, потому что я использовал поддержку Spring Hibernate (вместо Hibernate JPA).
Для вашей проблемы я также думаю, что лучше использовать поддержку Spring Hibernate.
Другие советы
Вам следует использовать старую версию спящего режима (совместимую с jpa 1).GAE навязывает вам все это.На самом деле я не знал, что он поддерживает JPA - я думал, что поддерживается только JDO.
Я не понимаю, почему вы определяете имя пользователя и пароль в файле persistence.xml.
Я думаю, что вам не нужны эти учетные данные, потому что доступ приложения к БД ограничен из консоли администрирования Google SQL Cloud, где вы указываете разрешенные идентификаторы приложений.
Если вы используете eclipse, я думаю, что проект GAE для java просто копирует банки GAE в WEB-INF \ lib, удаляет банки JPA из DataNucleus и Geronimo и копирует банку Hibernate. Думаю, я никогда этого не пробовал.
Удачи!