2014-10-14 4 views
1

나는 스프링 부트 프로젝트를 가지고 있으며, 엔티티를 DB에 맵핑하기 위해 최대 절전 모드를 사용하고있다.하지만 이제는 새로운 요구 사항이있다 : DB없이 테이블을 동적으로 생성 할 수 있어야한다. 어떤 매핑 (지금까지).Hibernate DDL 테이블 동적 생성

는 사람이 처리하는 데 도움이하기 위해, 몇 가지 프레임 워크에 대해 알고 있습니까 : 를 -I 내 테이블 내가 '

연결 관리를 다루는 -I 필요성을 만드는 SQL 또는 이와 유사한 (DDL)를 실행하려면 봄 데이터에 대해 들었지만 이것에 대한 의견이 필요합니다.

예 :

class DBHACKService { 
    void executeSQL(String ddl). 
} 

클라이언트는이 같은 호출 :이 방법에서는

new DBHackService.executeSQL ("create table mytable (name varchar)"); 

을 나는 몇 가지 조작을 할 수 내가 예를 들어 클라이언트가 사용할 수있는 서비스를 가지고 상상 SQL. 질문 : DBEngine에 보내는 가장 좋은 방법입니다.

감사합니다.

미리 감사드립니다. rui

답변

0

동적으로 스키마를 만들려면이 방법이 도움이 될 것입니다.

Hibernate: Automatically creating/updating the db tables based on entity classes

당신은 즉석에서 테이블을 작성 JDBC를 사용하여 DDL 문에서도 발행 할 수있다. 일부 XML 파일에 쿼리 유지. 일반 사항으로 유지됩니다. 설정 파일에 감시자 서비스가있는 경우 필요한 jdbc 호출을 실행할 수있는 새 쿼리로 순간 파일이 업데이트됩니다.

+0

안녕하세요. 귀하의 답변에 감사드립니다. 이것은 자동으로 스키마를 생성하지 않습니다. 이것은 도메인과 관련이없는 (또는 적어도 직접 관련이없는) 새 테이블을 만들려고합니다. 나는 런타임에 테이블 생성을 요청하는 방법을 원한다. – user1680680

2

database initialization의 Spring Boot 설명서를 살펴보십시오.

가장 간단한 옵션은 schema.sql 파일을 클래스 경로의 루트에 배치하는 것입니다 (예 : src/main/resources). 이 파일의 모든 DDL은 응용 프로그램 시작의 일부로 실행됩니다. One of Spring Boot's JDBC samples이 실제로이를 보여줍니다.

두 번째로 더 복잡한 옵션은 Liquibase 또는 Flyway과 같은 데이터베이스 마이그레이션 도구를 사용하는 것입니다. 마이그레이션 도구의 이점은 응용 프로그램의 요구가 변경 될 때 데이터베이스 스키마를 훨씬 쉽게 전개 할 수 있다는 것입니다. Spring Boot는 LiquibaseFlyway에 대한 작은 샘플 어플리케이션을 가지고 있습니다.

+0

안녕하세요. 나는 여기에 약간의 이해가 있다고 믿는다. 실제로 필요한 것은 응용 프로그램이 이미 실행 중이면 런타임에 SQL (DDL)을 내 DB 엔진에 전송하는 것입니다. – user1680680

+0

class DBHACKService { void executeSQL (String ddl)과 같이 클라이언트에서 사용할 수있는 서비스가 있다고 가정 해 보겠습니다. } 클라이언트가 다음과 같이 호출합니다. 새 DBHackService.executeSQL ("create table mytable (name varchar)"); 이 방법에서는 SQL에 대한 일부 조작을 수행 할 수 있습니다. 질문 : DBEngine에 보내는 가장 좋은 방법입니다. 다시 감사합니다. – user1680680

2

DdlUtils에서 런타임에 필요한 변경 사항을 언제든지 제공하고 변경 사항을 DB에 반영 할 수 있습니다. 형식은 데이터베이스 독립적이므로 이식성에 대해 걱정할 필요가 없습니다.

나는 그것이 얼마나 최신인지 알지 못합니다.

멋진 경우 Groovy.

0

SQL을 매개 변수로 전달할 때 수행하려는 작업은 무엇입니까?

SQL의 유효성을 검사하려면 쿼리를 실행하는 옵션이 있고 예외가 발생하면 전달 된 인수에 문제가 있음을 의미합니다.

sql 쿼리를 구문 분석하려면 jSqlParser를 사용할 수 있습니다. http://jsqlparser.sourceforge.net/

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 내가 원하는 것은 런타임에 테이블을 만들고 변경하는 것입니다. 실제로 SQL의 유효성을 검사하지는 않습니다. 런타임에 테이블을 작성, 변경 및 삭제하려고합니다. – user1680680

+0

http://db.apache.org/ddlutils/api-usage.html – DaTroop

+0

for create/alter 당신은 DdlUtils를 사용할 수 있습니다. 데이터베이스에서 모델을 읽고 거기에서 모델을 변경 한 다음 데이터베이스에 변경 사항을 쓸 수 있습니다. 내가 삭제 사건에 대해 모르겠지만 최악의 경우 DROP 문을 사용할 수 있습니다. – DaTroop