2017-09-22 1 views
0

프로덕션 환경에서 Oracle 데이터베이스 (12c)가 사용되고 테스트 사례로 HSQLDB (메모리)가 사용되는 설치가 있습니다. 나는 데이터베이스를 업데이트하기 위해 Liquibase를 사용한다.HSQLDB에서 JPA2를 사용하는 자동 신원 생성과 관련된 문제

@Entity 
@Table(name = "SYSTEM") 
public class System { 

    @ApiModelProperty(hidden = true) 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "ID", columnDefinition = "BIGINT") 
    private Long id; 

    @NotNull 
    @Size(max = 40) 
    @Column(name = "NAME", columnDefinition = "NVARCHAR2") 
    private String name; 

    @Size(max = 16) 
    @GeneratedValue 
    @Column(name = "TOKEN", columnDefinition = "VARBINARY") 
    private UUID token; 
} 

내가이 테이블에 사용하는 Liquibase 정의는 다음과 같습니다 :

나는 다음과 같은 클래스가

"createTable": { 
    "tableName": "SYSTEM", 
    "columns": [ 
     { 
      "column": { 
       "name": "ID", 
       "type": "BIGINT", 
       "autoIncrement": true, 
       "constraints": { 
        "primaryKey": true 
       } 
      } 
     }, 
     { 
      "column": { 
       "name": "NAME", 
       "type": "VARCHAR2(40)", 
       "constraints": { 
        "nullable": false 
       } 
      } 
     }, 
     { 
      "column": { 
       "name": "TOKEN", 
       "type": "RAW(16)", 
       "constraints": { 
        "nullable": false 
       } 
      } 
     } 
    ] 
} 

오라클 데이터베이스에서이 작품을 EntityManager.persist을 사용하여 새로운 시스템을 구축 . 행이 데이터베이스에 삽입되고 ID 필드가 예상대로 값으로 채워집니다.

HSQLDB 데이터베이스에서 이것은 발생하지 않습니다. 그리고 저에게는 자동 생성이 실행되지 않는 것처럼 보입니다. 시스템 테이블을 만들 HSQLDB에 의해 실행

는 SQL은 다음과 같습니다

CREATE TABLE PUBLIC."SYSTEM" (ID BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, NAME VARCHAR2(40) NOT NULL, TOKEN RAW(16) NOT NULL, CONSTRAINT PK_SYSTEM PRIMARY KEY (ID)) 

HSQLDB에서 알고있는 버그가 아니면 내가 뭔가 잘못하고있는 중이 야?

+0

버그가있는 경우 _h2 database_가 대신 사용할 수 있습니다 - w.r.t. 리퀴베이스. 오라클 호환 모드도 있습니다. –

+0

버그이거나 해결책을 찾을 수없는 경우 h2를 시도 할 것입니다. 제안 해 주셔서 감사합니다. – jkc

답변

0

;sql.syntax_ora=true을 JDBC 연결 URL 끝에 추가해야합니다.

메모리 내장 데이터베이스를 사용하면 데이터베이스를 업데이트하고 쿼리 할 때도 동일한 Java 프로세스를 사용해야합니다. 두 개의 개별 프로세스가 사용되면 프로세스가 종료 될 때 첫 번째 프로세스로 작성된 데이터베이스가 사라집니다.

+0

'; sql.syntax_ora = true'가 연결 URL에 있으므로 변경되지 않습니다. 두렵습니다. 그러나 당신의 제안에 감사드립니다. – jkc

+0

자세한 내용을 보려면 HSQLDB를 'server.silent = false' 설정을 가진 서버로 실행하여 실행되는 SQL을 표시하십시오. – fredt

+0

나는'server.silent = false'를 시도했지만 어떤 이유로 그것이 작동하지 않았다. 대신'hsqldb.sqllog = 2'을 시도하고 SQL이 인쇄되었습니다. SQL을 포함하도록 내 질문을 편집했습니다. – jkc

관련 문제