[SPRING] Spring 임베디드 데이터베이스는 다른 SQL 언어를 지원합니까?
SPRINGSpring 임베디드 데이터베이스는 다른 SQL 언어를 지원합니까?
H2는 다양한 SQL 언어를 지원하는 MS SQL Server, MySQL, Oracle 등과 같은 다양한 다른 데이터베이스에 대해 다양한 호환 모드를 제공합니다. 그러나 스프링에서 임베디드 데이터베이스를 설정할 때 해당 설정을 찾을 수 없습니다. 이것은 예를 들어 생산 과정에서 Oracle을 사용하고 테스트 중에 H2를 사용하는 경우 방언 특정 기능없이 "일반"SQL을 사용해야한다는 것을 의미합니까? 나는 뭔가를 간과 했는가?
해결법
-
==============================
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.어떤 버전의 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.다음 두 가지 옵션이 있습니다.
다음 두 가지 옵션이 있습니다.
스프링 코드는 다음과 같이 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가 실패하는 등의 다양한 문제가 발생합니다.
from https://stackoverflow.com/questions/9171743/does-spring-embedded-database-support-different-sql-dialects by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] <jar-file>을 검사하는 동안 오류가 발생하여 entityManagerFactory를 만드는 동안 오류가 발생했습니다. (0) | 2019.03.14 |
---|---|
[SPRING] @Transactional이 데이터베이스에 자동으로 저장되는 이유는 무엇입니까? (0) | 2019.03.14 |
[SPRING] Jersey와 함께 Jackson ObjectMapper 사용하기 (0) | 2019.03.14 |
[SPRING] StaleObjectstateException 행이에 의해 업데이트되거나 삭제되었습니다. (0) | 2019.03.14 |
[SPRING] 아무도 나에게 클래스 레벨 컨트롤러와 메소드 레벨 컨트롤러 간의 차이점을 설명 할 수 있습니까? (0) | 2019.03.14 |