JPA + Hibernate Google Cloud Sql - PullRequest
       7

JPA + Hibernate Google Cloud Sql

2 голосов
/ 20 октября 2011

Когда Google представил новый сервис - Google Cloud Sql, я решил перенести веб-приложение gwt + jpa + hibernate + spring + maven на gae. Так что у меня проблема при запуске приложения локально и на GEA. У меня есть ошибка при создании bean-компонента dao, вызванная этим:

     [ERROR] Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
[ERROR]     at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:625)
[ERROR]     at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
[ERROR]     at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
[ERROR]     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
[ERROR]     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
[ERROR]     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)

Так что мне показалось, что я использовал jpa-1.0 вместо jpa-2.0 с hibernate (из-за отсутствия метода jpa 1.0:

getValidationMode ()

Я проверил свои библиотеки ... все нормально - использую jpa 2.0 с hibernate-jpa-2.0-api.jar. Но я нашла промлем: Когда я использую свой код без gae и использую другую базу данных, все в порядке. Дело в том, что в appengine sdk есть собственный JPA, версия 1.0 (цитата здесь Использование JPA с App Engine )

Файлы JA JPA и хранилища данных включены в состав Java Engine SDK App Engine. Вы можете найти их в каталоге appengine-java-sdk / lib / user / orm /. Скопируйте JAR-файлы в каталог war / WEB-INF / lib / вашего приложения.

Когда приложение запускается, оно использует jpa 1.0 (без метода getValidationMode () в javax.persistence.spi.PersistenceUnitInfo) из appengine sdk вместо моего.

Итак, как я могу решить эту проблему, чтобы мое приложение использовало правильные банки? Вот мой файл persistence.xml также:

   <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
      http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

        <!-- A JPA Persistence Unit -->
        <persistence-unit name="PersistenceUnit"
            transaction-type="RESOURCE_LOCAL">
            <provider>org.hibernate.ejb.HibernatePersistence</provider>

            <properties>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
                <property name="hibernate.hbm2ddl.auto" value="update" />
                <property name="hibernate.show_sql" value="true" />
                <property name="hibernate.connection.url" value="jdbc:google:rdbms://bragininim:test/test"></property>
                <property name="hibernate.connection.driver_class"
                    value="com.google.appengine.api.rdbms.AppEngineDriver"></property>

                <!-- Connection -->
                <property name="hibernate.connection.username" value="****" />
                <property name="hibernate.connection.password" value="****" />

            </properties>
        </persistence-unit>

    </persistence>

Ответы [ 4 ]

4 голосов
/ 20 октября 2011

Существует некоторая проблема с поддержкой Hibernate JPA, потому что она использовала спецификацию JPA 2.0. Но Google App Engine поддерживает только спецификацию JPA1.0. У меня тоже была такая же проблема, потому что я использовал поддержку Spring Hibernate (вместо Hibernate JPA).

Для вашей проблемы я также думаю, что лучше использовать поддержку Spring Hibernate.

1 голос
/ 20 октября 2011

Вы должны использовать более старую версию hibernate (совместим с jpa 1). GAE навязывает вам эти вещи. На самом деле я не знал, что он поддерживает JPA - я думал, что поддерживается только JDO.

0 голосов
/ 30 декабря 2011

Если вы используете eclipse, я думаю, что проект GAE для java просто копирует баночки GAE в WEB-INF \ lib, удаляет баночки JPA из DataNucleus и Geronimo и копирует вашу банку Hibernate.Я никогда не пробовал это, я думаю.

Удачи!

0 голосов
/ 29 октября 2011

Я не понимаю, почему вы определяете имя пользователя и пароль в файле persistence.xml.

Думаю, вам не нужны эти учетные данные, поскольку доступ приложения к БД ограничен администрацией консоли Google SQL Cloud, где вы указываете идентификаторы разрешенных приложений.

...