it-swarm.com.de

Wie kann die automatische Tabellenerstellung im Frühling/Winterschlaf/jpa funktionieren?

Ich kann die automatische Tabellenerstellung im Frühjahr nicht nutzen, wenn Sie "hibernate/jpa" verwenden.

Hier sind meine Konfigurationsdateien:

<?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_1_0.xsd"
   version="1.0">

    <persistence-unit name="naveroTest">
     <provider>org.hibernate.ejb.HibernatePersistence</provider>
     <class>xxx</class>
        ...


        <properties>
            <property name="hibernate.archive.autodetection" value="class, hbm"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
   <property name="hibernate.connection.url" value="jdbc:hsqldb:file:/tmp/naveroTestDB"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.connection.password" value=""/> 
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
        </properties>
    </persistence-unit>
</persistence>

context.xml

   <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
                           http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">

     <!-- For auto creation of tables -->
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
      <property name="url" value="jdbc:hsqldb:file:/tmp/naveroTestDB" />
      <property name="username" value="sa" />
      <property name="password" value="" />
     </bean>

     <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="loadTimeWeaver">
       <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
      </property>
      <property name="jpaVendorAdapter">
       <bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="generateDdl" value="true" />
        <property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />
        <property name="showSql" value="true" />
       </bean>
      </property>
     </bean>

     <bean id="PictureBean" class="de.navero.server.bl.PictureBean">
      <property name="entityManagerFactory"><ref local="entityManagerFactory" /></property>
     </bean>

    </beans>

Irgendwelche Ideen, was möglicherweise falsch ist? Danke für jede Hilfe :).

20
Ben

versuche Folgendes:


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://Java.Sun.com/xml/ns/
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://.Sun.com/xml/ns/persistence
  http://Java.Sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="naveroTest" transaction-type="RESOURCE_LOCAL" />
</persistence>

<?xml version="1.0" encoding="UTF-8"?>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
...
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
        </props>
    </property>
    <property name="dataSource" ref="dataSource" />
</bean>

Das funktioniert für mich.

12
ytoh

Ich hatte genau das gleiche Problem ... 

Eigenschaft auskommentieren 

    <!--property name="generateDdl" value="true"--> in the JpaAdapter, 

aber Einstellung 

<property name="hibernate.hbm2ddl.auto" value="create"/> in persistence.xml 

arbeitete für mich Ich verwende hsqldb. 

In den Protokollen ist mir aufgefallen, dass der Modus so eingestellt wurde, dass er unabhängig von den Einstellungen in Persistence.xml aktualisiert wird.

Der Wert in persistence.xml wurde tatsächlich abgerufen, aber niemals angewendet .. Ich verwende Spring 3.0.6 und Hibernate 4

7
Shahed

Können Sie versuchen, die Eigenschaft generateDdl in HibernateJpaVendorAdapter in Ihrer Spring-Konfigurationsdatei in false zu ändern.

Scheint in Konflikt mit der Hibernate-Eigenschaft hibernate.hbm2ddl.auto zu treten

Siehe https://jira.springframework.org/browse/SPR-6836 für weitere Informationen.

6
ddewaele

In My hibernate-default.cfg.xml habe ich verwendet 

   <property name="hibernate.hbm2ddl.auto">update</property>

und es hat perfekt funktioniert, also war die config-Datei wie folgt

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="dialect">
      org.hibernate.dialect.MySQLDialect
    </property>
    <property name="current_session_context_class">thread</property>
    <!-- When an HQL statement declares a true/false, replace with the standard Y/N -->
    <property name="hibernate.query.substitutions">true 'Y', false 'N'</property>
    <!-- A useful property do debugging queries.  Besure sure it is false or commented out when going PROD -->
    <!--        <property name="hibernate.show_sql">true</property>   -->
    <!-- Format the printed out SQL generated by Hibernate -->
    <property name="hibernate.format_sql">false</property>
    <!-- If enabled, Hibernate will collect statistics useful for performance tuning - JMX -->
    <property name="hibernate.generate_statistics">false</property>

    <property name="hibernate.hbm2ddl.auto">update</property>

    <mapping class=....
2
Theresa Forster

leider funktionierten beide Lösungen nicht für mich :(. "hibernate.hbm2ddl.auto = update" wäre auch in Ordnung, da die Tabellen erstellt werden sollten, wenn sie nicht vorhanden sind.

Es scheint, dass alle Eigenschaftseinstellungen aus der persistence.xml als Benutzername erkannt werden und der Datenbankanbieter richtig eingestellt ist. Leider werden die Tabellen beim Start nicht erstellt, was dazu führt, dass mein Testfall fehlschlägt, da die SELECT-Anweisung einen Fehler ausgibt.

Wie Sie sehen, habe ich die Verbindungs-URL so eingestellt, dass sie eine lokale Dateidatenbank verwendet, sodass ich das Datenbankprotokoll nach dem Testlauf überprüfen kann. Die Protokolldatei ist jedoch nach dem Testlauf noch leer, es wird sogar kein Fehler geschrieben :(.

1
Ben

Das hat bei mir funktioniert

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:mem://productDb" />
        <property name="username" value="sa" />
        <property name="password" value="" />
    </bean>
<property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="generateDdl" value="true" />
                <property name="showSql" value="true" />
            </bean>
        </property>

Wenn ich den Wert wie folgt auf false ändere<property name="generateDdl" value="false" /> dann bekomme ich SqlExceptionHelper:144 - Table not found in statement

0
rajeev pani..