2011-09-16 5 views
1

는 다음과 같은 사소한 클래스를 가정 자바 코드에서 시작Hibernate는 다음 DB 레이아웃

package Sample; 

    public class Status { 

     private Long id; 
     private String status; 

     public Status() {} 

     public Status(String status) { 
     this.status = status; 
     } 

     public Long getId() { 
      return id; 
     } 
     public void setId(Long id) { 
      this.id = id; 
     } 
     public String getStatus() { 
      return status; 
     } 
     public void setStatus(String status) { 
      this.status = status; 
     } 
    } 

을 나는 Status.hbm.xml에서 최대 절전 모드 매핑을 정의한이 클래스.
이 파일은 클래스를 테이블에 매핑하는 방법을 최대 절전 모드로 설명합니다.
hibernate.cfg에서 내 데이터베이스 (MySQL)에 연결하는 방법을 정의했습니다. 나는 데이터베이스에 Status의 객체를 저장하기 위해 org.hibernate.Session를 사용하려고하면 연결 할 데이터베이스가 없다는 것이 불만이 구성
:

<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="show_sql">true</property> 
     <property name="format_sql">true</property> 

     <mapping resource="sample/Status.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

은 내가 undertand에하지 않는 것은 다음과 같다.

(842) [주] 오류 org.hibernate.util.JDBCExceptionReporter - 없음 데이터베이스를 선택하지

나는의 URL 연결 문자열의 일부로 기존 데이터베이스를 추가하는 경우 hibernate.cfg.xml

<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property> 

test.status 테이블이 존재하지 않는 다른 오류가 발생합니다.
나는 Hibernate가 그것을 만들 것이라고 기대하고 있었다.
코드는 내가 할 경우에만 succesfull입니다 :

SchemaExport schemaExport = new SchemaExport(cfg); 
schemaExport.create(false, true); 

그래서 제 질문은

, 최대 절전 모드를 사용하고 스키마와 데이터베이스와 자바부터의 테이블을 만들 수있는 적절한 방법이 무엇인지.
예를 들어 MySQL 클라이언트에서 MySQL 데이터베이스를 수동으로 생성하고 싶지 않습니다.
올바른 방법으로 SchemaExport 위의 접근 방식이 있습니까?
Java DB 디자인에서 시작하기에 가장 좋은 옵션은 무엇입니까?

답변

0

Hibernate가 테이블 구조를 만들 수있는 것은 테스트를위한 괜찮지 만, 응용 프로그램이 생산에 배포되었으며 실제로 실행되면, 당신은 데이터베이스 당신이 그것 때문에 다시 배포 할 때마다 생성하는 최대 절전 모드 싶지 않을 것이다 귀하의 데이터를 지울 것입니다. 대부분의 개발은 새로운 것은 아니지만 기존 시스템을 업데이트하기 때문에 데이터베이스 변경을 관리하기위한 ALTER 스크립트를 만드는 데 익숙해지는 것이 좋은 습관입니다.

그렇습니다. 예, 입니다. Hibernate가 데이터베이스 스키마를 생성하게하는 정확한 방법입니다. 당신은 또한 Hibernate 설정 파일에서 일어날 수 있도록 설정할 수 있지만, 내 머리 꼭대기에서 그 속성을 기억하지 못한다.

+0

하이버 네이트가 모든 재배포시 DB를 생성하면 데이터를 지울 것임을 이해합니다. 프로덕션으로 응용 프로그램을 가져 가고 싶다면, 최대 절전 모드로 스키마 및 테이블을 생성하고 그 시점부터 응용 프로그램은 Hibernate 생성 스키마 (한 번만 수행됨)를 사용합니다. 그것은 불가능합니까? 또한'ALTER' 스크립트는 DB 수준입니까? 어떻게 든 Hibernate에 의해 완료되지 않습니까? – Cratylus

+0

내 응용 프로그램 데이터베이스의 첫 번째 버전을 얻는 가장 좋은 방법은 최대 절전 모드에서 생성 한 다음 원하는 방식으로 스키마를 수정하는 것입니다.여기에는 기본값 대신 InnoDB를 사용하도록 테이블을 설정하고 적절한 외래 키를 추가하는 것과 같은 것들이 포함된다. (어느 것도 Hibernate가 기본적으로하지 않는다.) 그런 다음이 편집 된 스키마를 내 보내어 프로덕션 용 내 스키마로 사용합니다. 일반적으로, Hibernate는 그것이 설계된 것이 아니기 때문에 스키마를 조작하지 않아야한다. ORM이 의미하는 바를 수행하게하고, 이는 데이터베이스와 코드 객체 간의 매핑입니다. – cdeszaq

관련 문제