복붙노트

[SPRING] 봄 / 겨울잠 / jpa에서 일하는 자동 테이블 생성을 얻는 방법?

SPRING

봄 / 겨울잠 / jpa에서 일하는 자동 테이블 생성을 얻는 방법?

hibernate / jpa를 사용할 때 나는 봄에 자동 테이블 생성을 할 수 없다.

다음은 설정 파일입니다.

<?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>

어떤 아이디어가 잘못되었을 수 있습니까? 어떤 도움을 주셔서 감사합니다 :).

해결법

  1. ==============================

    1.다음을 시도하십시오.

    다음을 시도하십시오.

    
    <?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>
    

    이것은 나를 위해 작동합니다.

  2. ==============================

    2.나는 똑같은 문제가 있었다.

    나는 똑같은 문제가 있었다.

    속성 주석 처리하기

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

    그러나 설정

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

    나를 위해 일했다. hsqldb를 사용하고 있습니다.

    로그에서 모드 설정에 상관없이 업데이트 모드가 설정되었음을 확인했습니다. persistence.xml.

    persistence.xml의 값은 실제로 선택되었지만 결코 적용되지 않았습니다. Spring 3.0.6과 Hibernate 4를 사용하고있다.

  3. ==============================

    3.봄 설정 파일의 HibernateJpaVendorAdapter에서 generateDdl 속성을 false로 변경할 수 있습니까?

    봄 설정 파일의 HibernateJpaVendorAdapter에서 generateDdl 속성을 false로 변경할 수 있습니까?

    최대 절전 모드 hibernate.hbm2ddl.auto 속성과 충돌하는 것 같습니다.

    자세한 내용은 https://jira.springframework.org/browse/SPR-6836을 참조하십시오.

  4. ==============================

    4.내 hibernate-default.cfg.xml에 내가 사용했다.

    내 hibernate-default.cfg.xml에 내가 사용했다.

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

    그리고 완벽하게 작동 했으므로 config 파일은 다음과 같습니다.

    <?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=....
    
  5. ==============================

    5.안타깝게도 두 솔루션 모두 나를 위해 작동하지 않았다. ( "hibernate.hbm2ddl.auto = update"도 존재하지 않는다면 테이블을 만들어야하므로 괜찮을 것이다.

    안타깝게도 두 솔루션 모두 나를 위해 작동하지 않았다. ( "hibernate.hbm2ddl.auto = update"도 존재하지 않는다면 테이블을 만들어야하므로 괜찮을 것이다.

    persistence.xml의 모든 속성 설정이 사용자 이름으로 인식되고 데이터베이스 공급자가 올바르게 설정되어있는 것 같습니다. 슬프게도, 테이블이 시작시에 만들어지지 않아서 SELECT 문이 에러를 던지면서 테스트 케이스가 실패하게됩니다 ...

    보시다시피 로컬 파일 데이터베이스를 사용하도록 연결 URL을 설정 했으므로 테스트를 마친 후 데이터베이스 로그를 검토 할 수 있습니다. 그러나 테스트 실행 후에도 로그 파일은 여전히 ​​비어 있으며 아무런 오류도 기록되지 않습니다.

  6. ==============================

    6.이것은 나를 위해 일했다.

    이것은 나를 위해 일했다.

    <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>
    

    이 값을 false로 변경하면 그러면 SqlExceptionHelper가 발생합니다. 144 - 문이 문에 없습니다.

  7. ==============================

    7.어쩌면 늦었지만, 오늘도 레거시 앱에 대한 몇 가지 테스트를 작성했을 때 동일한 문제가있었습니다.

    어쩌면 늦었지만, 오늘도 레거시 앱에 대한 몇 가지 테스트를 작성했을 때 동일한 문제가있었습니다.

    나는 봄 2.5, hibernate3, HSQL 데이터베이스를 사용했다.

    이를 해결하기 위해 데이터베이스를 HSQL에서 H2로 변경하고 데이터 소스를 org.springframework.jdbc.datasource.DriverManagerDataSource에서 org.apache.commons.dbcp.BasicDataSource로 변경했습니다.

    spring-context.xml은 다음과 같습니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="org.h2.Driver"/>
            <property name="url" value="jdbc:h2:mem:test"/>
            <property name="username" value="sa"/>
            <property name="password" value=""/>
        </bean>
    
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
            </property>
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="dataSource" ref="dataSource"/>
            <property name="entityManagerFactory" ref="entityManagerFactory"/>
        </bean>
    
        <tx:annotation-driven/>
    ...
    </beans>
    

    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_1_0.xsd"
                 version="1.0">
    
        <persistence-unit name="TestPU" transaction-type="RESOURCE_LOCAL">
            <properties>
                <property name="hibernate.show_sql" value="true"/>
                <property name="hibernate.format_sql" value="true"/>
                <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
                <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            </properties>
        </persistence-unit>
    
    </persistence>
    

    나는 그것이 도움이되기를 바랍니다.

  8. ==============================

    8.필자의 경우 @Table으로 주석 처리 된 객체는 @Entity로 주석 처리되지 않았기 때문에 표가 작성되지 않았습니다.

    필자의 경우 @Table으로 주석 처리 된 객체는 @Entity로 주석 처리되지 않았기 때문에 표가 작성되지 않았습니다.

  9. from https://stackoverflow.com/questions/4307690/how-to-get-automatic-table-creation-working-in-spring-hibernate-jpa by cc-by-sa and MIT license