首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在模式中通过Spring指定,H2数据库也无法在列中设置默认值

即使在模式中通过Spring指定,H2数据库也无法在列中设置默认值
EN

Stack Overflow用户
提问于 2017-11-21 22:17:03
回答 1查看 6.3K关注 0票数 2

我正在尝试使用REST DB和Spring Boot创建一个非常简单的-based API

除了import.sql文件中的数据插入之外,一切看起来都很好。

尽管模式将默认值指定为YNOT NULL (请参阅下面的图像),但表中的Y列不会填充数据。

src/main/resources/schema.sql

代码语言:javascript
复制
DROP TABLE IF EXISTS COUNTRY;
CREATE TABLE IF NOT EXISTS COUNTRY(
    COUNTRY_ID SERIAL PRIMARY KEY, 
    COUNTRY_NAME VARCHAR(100) NOT NULL, 
    ISO_ALPHA2_CODE VARCHAR(2) NOT NULL, 
    ISO_ALPHA3_CODE VARCHAR(3) NOT NULL, 
    ISO_NUMERICAL_CODE INTEGER NOT NULL, 
    ACTIVE CHAR(1) DEFAULT 'Y' NOT NULL
);

src/main/resources/import.sql

代码语言:javascript
复制
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Afghanistan','AF','AFG','4');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Aland Islands','AX','ALA','248');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Albania','AL','ALB','8');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Algeria','DZ','DZA','12');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('American Samoa','AS','ASM','16');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Andorra','AD','AND','20');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Angola','AO','AGO','24');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Anguilla','AI','AIA','660');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Antarctica','AQ','ATA','10');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Antigua and Barbuda','AG','ATG','28');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Argentina','AR','ARG','32');
INSERT INTO COUNTRY (COUNTRY_NAME,ISO_ALPHA2_CODE,ISO_ALPHA3_CODE,ISO_NUMERICAL_CODE) VALUES ('Armenia','AM','ARM','51');

application.yml

代码语言:javascript
复制
spring:
    application:
        name: country-service

#Datasource settings
    datasource:
        url: jdbc:h2:file:~/test
        username: sa
        password: 
        driver-class-name: org.h2.Driver        

pom.xml

代码语言:javascript
复制
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
EN

回答 1

Stack Overflow用户

发布于 2017-11-21 22:50:57

我认为Spring正在执行ddl=createDrop,在应用程序结束后数据是否会保留呢?在您的validate中指定application.yml。我在查找答案时看到的一件事是,缺省值是在空之后指定的。但是,注释中的人员对于模式绝对是正确的,如果它真的是NOT NULL,h2会在尝试将列值设置为null时抛出错误。

那肯定是弹簧引导自动配置..。

You can set spring.jpa.hibernate.ddl-auto explicitly and the standard Hibernate property values are none, validate, update, create, create-drop. Spring Boot chooses a default value for you based on whether it thinks your database is embedded (default create-drop) or not (default none).

默认情况下创建模式,运行应用程序,然后删除它。如果计划自己创建架构,请选择“无”或“验证”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47423688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档