[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.다음을 시도하십시오.
다음을 시도하십시오.
<?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.나는 똑같은 문제가 있었다.
나는 똑같은 문제가 있었다.
속성 주석 처리하기
<!--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.봄 설정 파일의 HibernateJpaVendorAdapter에서 generateDdl 속성을 false로 변경할 수 있습니까?
봄 설정 파일의 HibernateJpaVendorAdapter에서 generateDdl 속성을 false로 변경할 수 있습니까?
최대 절전 모드 hibernate.hbm2ddl.auto 속성과 충돌하는 것 같습니다.
자세한 내용은 https://jira.springframework.org/browse/SPR-6836을 참조하십시오.
-
==============================
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.안타깝게도 두 솔루션 모두 나를 위해 작동하지 않았다. ( "hibernate.hbm2ddl.auto = update"도 존재하지 않는다면 테이블을 만들어야하므로 괜찮을 것이다.
안타깝게도 두 솔루션 모두 나를 위해 작동하지 않았다. ( "hibernate.hbm2ddl.auto = update"도 존재하지 않는다면 테이블을 만들어야하므로 괜찮을 것이다.
persistence.xml의 모든 속성 설정이 사용자 이름으로 인식되고 데이터베이스 공급자가 올바르게 설정되어있는 것 같습니다. 슬프게도, 테이블이 시작시에 만들어지지 않아서 SELECT 문이 에러를 던지면서 테스트 케이스가 실패하게됩니다 ...
보시다시피 로컬 파일 데이터베이스를 사용하도록 연결 URL을 설정 했으므로 테스트를 마친 후 데이터베이스 로그를 검토 할 수 있습니다. 그러나 테스트 실행 후에도 로그 파일은 여전히 비어 있으며 아무런 오류도 기록되지 않습니다.
-
==============================
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.어쩌면 늦었지만, 오늘도 레거시 앱에 대한 몇 가지 테스트를 작성했을 때 동일한 문제가있었습니다.
어쩌면 늦었지만, 오늘도 레거시 앱에 대한 몇 가지 테스트를 작성했을 때 동일한 문제가있었습니다.
나는 봄 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.필자의 경우 @Table으로 주석 처리 된 객체는 @Entity로 주석 처리되지 않았기 때문에 표가 작성되지 않았습니다.
필자의 경우 @Table으로 주석 처리 된 객체는 @Entity로 주석 처리되지 않았기 때문에 표가 작성되지 않았습니다.
from https://stackoverflow.com/questions/4307690/how-to-get-automatic-table-creation-working-in-spring-hibernate-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 전쟁으로 배포 된 스프링 부트 응용 프로그램의 기본 시작 페이지 변경 (0) | 2019.01.16 |
---|---|
[SPRING] 스프링 컨트롤러 클래스에서 경로 변수를 사용할 수 있습니까? (0) | 2019.01.16 |
[SPRING] 봄 크론 대 보통 크론? (0) | 2019.01.16 |
[SPRING] Spring @Value 주석은 항상 null로 평가됩니까? (0) | 2019.01.16 |
[SPRING] JAR의 PathMatchingResourcePatternResolver 및 URLClassloader를 사용하여 리소스 찾기 (0) | 2019.01.16 |