2010-12-22 2 views
32

http://www.vaannila.com/spring/spring-hibernate-integration-1.html는 Hibernate는이 튜토리얼을 읽는하면 데이터베이스 자동

에 테이블을 생성 하는가, 그들은 DB에 테이블을 생성 위에 아무 것도 언급하지 않았습니다. Hibernate는 일단 테이블과 필드를 지정하면 테이블과 필드를 자동으로 처리한다.

여기 내 콩 구성입니다.

<?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:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> 

    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
     <property name="url" value="jdbc:mysql://127.0.0.1:3306/spring"/> 
     <property name="username" value="monwwty"/> 
     <property name="password" value="www"/> 
    </bean> 

    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="myDataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>uk.co.vinoth.spring.domain.User</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">create</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="myUserDAO" class="uk.co.vinoth.spring.dao.UserDAOImpl"> 
     <property name="sessionFactory" ref="mySessionFactory"/> 
    </bean> 

    <bean name="/user/*.htm" class="uk.co.vinoth.spring.web.UserController" > 
     <property name="userDAO" ref="myUserDAO" /> 
    </bean> 

</beans> 

답변

49

당신의 hibernate.hbm2ddl.auto 설정은 데이터베이스가 생성되는 것을 정의한다 (옵션 validate, create, update 또는 create-drop 있습니다)

+1

이 설정은 최대 절전 모드 구성 파일에 있습니다. –

23

예, 설정에 다음 속성이 있기 때문에 가능합니다. 테스트하는 동안 괜찮습니다.하지만 프로덕션에서는이를 비활성화해야합니다.

<prop key="hibernate.hbm2ddl.auto">create</prop> 
+0

생산 중에 이것을 사용 중지하는 것이 바람직한 이유는 무엇입니까? –

+1

"내장 된 최대 절전 모드 연결 풀은 프로덕션 환경을위한 것이 아니며 프로덕션 - 준비 연결 풀에서 발견 된 몇 가지 기능이 없습니다."http://docs.jboss.org/hibernate/orm/4.2/quickstart/en-US/html/ch02.html –

5

예, 최대 절전 모드가 hibernate.hbm2ddl.auto 재산의 방법으로 구성 할 수 있습니다 hibernate.cfg.xml 파일이 DB에 테이블을 자동으로 작성하여 테이블이없는 경우 엔티티를 저장합니다.

이것은 새로운 in-memory, DB를 사용하고 응용 프로그램을 실행할 때마다 또는 테스트하는 동안 새 데이터베이스를 만들 수있는 개발 중에 편리 할 수 ​​있습니다.

5

hibernate.hbm2ddl.autoupdate으로 설정해도 작동하지 않습니다. 내 열 이름 (user) 중 하나가 SQL 키워드 였기 때문에 생성 된 생성 SQL이 유효하지 않은 것으로 나타났습니다. 이것은 부드럽게 실패했고, 로그를 검사하기 전까지 무슨 일이 일어나고 있는지 명확하지 않았습니다.

-1

예 당신은 당신이 당신의 @Id 같이 제출 정의해야합니다 Entity 클래스에

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

BTW, 당신의 hibernate.cfg.xml 파일에

<property name="hbm2ddl.auto" value="create"/> 
5

추가 다음과 같은 속성을 사용할 수 있습니다 이 :

@Id 
@GeneratedValue(generator = "increment") 
@GenericGenerator(name = "increment", strategy = "increment") 
@Column(name = "id") 
private long id; 

다음 정의를 사용하는 경우 aybe 작동하지 :

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id") 
private long id; 
Hibernate는 당신이 명시 적으로 setProperty는 ("hibernate.hbm2ddl.auto"를 호출하여 구성해야하지만 대신 다 대다 매핑에 사용 순서와 테이블을 최대 절전 모드, 테이블을 만들 수 있습니다
0

, "create"). 기본적으로 DB를 사용하여 스키마의 유효성을 검사하고 "ORA-00942 : table or view does not exist"오류를 제공하여 이미 존재하지 않으면 실패합니다.

위의 구성을 수행하면 수행 할 작업 순서는 다음과 같습니다. - a) 모든 테이블과 시퀀스를 삭제하고 오류가없는 경우 오류를 표시하지 않습니다. b) 모든 테이블과 시퀀스를 생성하십시오 c) 제약 조건이있는 테이블을 변경하십시오 d) 데이터를 삽입하십시오.

관련 문제