HBM2DDL.AUTO를 만들 때 테이블 / 뷰가 존재하지 않는 SQLGRAMEREXCETION을 던지는 이유는 무엇입니까?
-
11-12-2019 - |
문제
나는 최대 절전 모드와 봄 및 서블릿으로 실험 해왔다.자, 나는 갇혀있다.왜 내가이 예외를 얻는거야?hbm2ddl.auto가 생성되도록 설정되면 테이블이 자동으로 만들어질 것입니다.
appicationContext.xml
.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver" />
<property name="url" value="jdbc:derby://localhost:1527/db;create=true" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="org.springpractice.domain" />
<property name="hibernateProperties">
<props>
<prop key="dialect">
org.hibernate.dialect.DerbyTenSevenDialect</prop>
<prop key="show_sql">true</prop>
<prop key="cache.provider_class">
org.hibernate.cache.NoCacheProvider</prop>
<prop key="hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
userdetails.java
.
package org.springpractice.domain;
@Entity
public class UserDetails {
@Id @GeneratedValue
protected int id;
protected String name;
protected String email;
// setters/getters ...
}
main.java
.
@WebServlet("/")
public class Main extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.println("hello from servlet");
UserDetails user = new UserDetails();
user.setEmail("bob.smith@gmail.com");
user.setName("Bob Smith");
ApplicationContext beanFactory =
WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext());
SessionFactory sessionFactory = (SessionFactory) beanFactory.getBean("sessionFactory");
Session session = sessionFactory.openSession();
session.save(user);
session.close();
}
}
예외
.org.hibernate.exception.SQLGrammarException: Table/View 'USERDETAILS' does not exist.
org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:146)
org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
$Proxy10.prepareStatement(Unknown Source)
...
해결책
속성 이름은 최대 절전 모드로 접두어로되어야합니다.
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="org.springpractice.domain" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.DerbyTenSevenDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.NoCacheProvider</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
.
btw 다음과 같이 속성을 구성하는 더 간단한 방법이 있습니다
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect
hibernate.show_sql=true
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
hibernate.hbm2ddl.auto"=create
</value>
</property>
. 다른 팁
@Table("USERDETAILS")
및 @Column
주석이있는 모든 필드를 사용하여 엔티티 주석을보십시오.
참조 http://www.vaannila.com/spring/Spring-Hibernate-Integration-1.html Hibernate는 데이터베이스에서 테이블을 자동으로 생성합니다 Hibernate HBM2DDL.Auto Aatoto 가능한 값과 그들이하는 일은 무엇입니까?