hibernate + JPA + Spring + Mysql не уронит стол - PullRequest
0 голосов
/ 19 марта 2011

У меня есть приложение, использующее hibernate + JPA + Spring + Mysql, каждый раз, когда я запускаю приложение, в таблицу добавляются новые данные, когда я проверяю, что эти же данные снова и снова добавляются в таблицы.хотя я определил:

persistence_unit=data-mysql-create

в моем конфигурационном файле.я предполагаю, что сначала удалят таблицы, а затем создадут новые данные в таблице, верно?но, казалось, это не сработало.Ниже приведены некоторые другие конфигурации, которые у меня есть:

applicationContext.xml:

  <!-- The shared JPA entity manager factory. -->
  <bean id="entityManagerFactory" class="javax.persistence.Persistence"
    factory-method="createEntityManagerFactory" destroy-method="close"
    scope="singleton">
    <constructor-arg value="${persistence_unit}" />
    <constructor-arg>
      <util:map>
        <entry key="javax.persistence.jdbc.url" value="${db_url}" />
        <entry key="javax.persistence.jdbc.user" value="${db_user}" />
        <entry key="javax.persistence.jdbc.password" value="${db_password}" />
        <entry key="hibernate.search.default.indexBase" value="${lucene_index_directory}" />
      </util:map>
    </constructor-arg>
  </bean>

  <!-- The data repository. -->
  <bean id="dataRepository" class="com.xyz.news.api.JPADataRepository">
    <constructor-arg ref="entityManagerFactory" />
  </bean>

persistence.xml:

  <persistence-unit name="data-mysql-create" transaction-type="RESOURCE_LOCAL">
    <class>com.xyz.news.model.Data</class>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
      <property name="javax.persistence.jdbc.user" value="news" />
      <property name="javax.persistence.jdbc.password" value="news" />
      <property name="hibernate.dialect" value="com.xyz.news.rdb.NewsMySQLDialect" />
      <property name="hibernate.max_fetch_depth" value="3" />
      <property name="hibernate.hbm2ddl.auto" value="create-drop" />
      <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
      <property name="hibernate.c3p0.max_size" value="100" />
      <property name="hibernate.c3p0.min_size" value="1" />
      <property name="hibernate.c3p0.acquire_increment" value="1" />
      <property name="hibernate.c3p0.idle_test_period" value="60" />
      <property name="hibernate.c3p0.max_statements" value="0" />
      <property name="hibernate.c3p0.timeout" value="30" />
      <property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider" />
      <property name="hibernate.search.default.indexBase" value="lucene/indexes" />
    </properties>
      </persistence-unit>

1 Ответ

0 голосов
/ 06 марта 2012

Вы уверены, что используете HibernatePersistence провайдера?

Я думаю, то, что вы укажете, означает, что все, что найдено в classpath witch, реализует javax.persistence.Persistence может использоваться в качестве поставщика (ElcipseLink, Hibernate ...).

Если вы хотите убедиться, что Hibernate используется, попробуйте настроить jpaVendorAdapter и установить его на
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">.

Затем вы можете включить уровень TRACE в своих log4j.properties (org.hibernate=TRACE, извините, я не помню точно класс, в котором печатаются фактические загруженные свойства, так что это будет МНОГО сообщений журнала) и проверить вывод для строки hibernate.hbm2ddl.auto она должна быть в самом начале, когда создается экземпляр EntityManagerFactory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...