복붙노트

[SPRING] Spring 임베디드 데이터베이스는 다른 SQL 언어를 지원합니까?

SPRING

Spring 임베디드 데이터베이스는 다른 SQL 언어를 지원합니까?

H2는 다양한 SQL 언어를 지원하는 MS SQL Server, MySQL, Oracle 등과 같은 다양한 다른 데이터베이스에 대해 다양한 호환 모드를 제공합니다. 그러나 스프링에서 임베디드 데이터베이스를 설정할 때 해당 설정을 찾을 수 없습니다. 이것은 예를 들어 생산 과정에서 Oracle을 사용하고 테스트 중에 H2를 사용하는 경우 방언 특정 기능없이 "일반"SQL을 사용해야한다는 것을 의미합니까? 나는 뭔가를 간과 했는가?

해결법

  1. ==============================

    1.H2 문서에 따르면 Oracle 호환 모드는 매우 제한적입니다.

    H2 문서에 따르면 Oracle 호환 모드는 매우 제한적입니다.

    예를 들어, PL / SQL 프로 시저를 사용할 수 없습니다.

    Spring의 EmbeddedDatabase를 사용하는 경우에는 호환 모드를있는 그대로 설정할 수 없습니다. 자신 만의 EmbeddedDatabaseConfigurer를 구현하고 JDBC URL을 통해 호환 모드를 지정해야합니다 (아래 참조).

    또한 H2와 Spring의 호환 모드를 사용하려면 DataSource를 사용하여 고전적인 방법으로 JDBC URL에 모드를 설정하면됩니다 (스프링과 관련이 없도록).

    jdbc:h2:~/test;MODE=Oracle
    

    그리고 Hibernate를 사용한다면, H2 대신 Oracle Dialect를 지정해야합니다.

  2. ==============================

    2.어떤 버전의 H2 데이터베이스? 설명서마다 SQL 문 (http://www.h2database.com/html/features.html#compatibility)을 사용하여 호환 모드를 설정할 수 있습니다.

    어떤 버전의 H2 데이터베이스? 설명서마다 SQL 문 (http://www.h2database.com/html/features.html#compatibility)을 사용하여 호환 모드를 설정할 수 있습니다.

    SET MODE PostgreSQL
    

    Spring jdbc 임베디드 데이터베이스에 의해로드 된 첫 번째 SQL 스크립트 파일에이 문장을 추가하기 만하면된다.

  3. ==============================

    3.다음 두 가지 옵션이 있습니다.

    다음 두 가지 옵션이 있습니다.

    스프링 코드는 다음과 같이 URL을 생성합니다.

    String.format ( "jdbc : h2 : mem : % s; DB_CLOSE_DELAY = -1", databaseName)

    따라서 setName ()에서 URL의 모든 H2 특정 매개 변수를 사용할 수 있습니다.

    private DataSource dataSource() {
        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        EmbeddedDatabase db = builder
            .setType(EmbeddedDatabaseType.H2)
            .setName("testdb;DATABASE_TO_UPPER=false;MODE=Oracle")
            .addScript("schema.sql")
            .addScript("data.sql")
            .build();
        return db;
    }
    

    주된 다른 점은 (2) INIT에서 정의 된 스크립트를 DB 생성마다 한 번이 아니라 모든 데이터베이스 연결 생성에 대해 실행한다는 것입니다. 이로 인해 중복 키로 인해 INSERT가 실패하는 등의 다양한 문제가 발생합니다.

  4. from https://stackoverflow.com/questions/9171743/does-spring-embedded-database-support-different-sql-dialects by cc-by-sa and MIT license