Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java H2数据库向主键插入null_Java_Spring Boot_Sequence_H2 - Fatal编程技术网

Java H2数据库向主键插入null

Java H2数据库向主键插入null,java,spring-boot,sequence,h2,Java,Spring Boot,Sequence,H2,我在H2数据库中创建了如下表: CREATE OR REPLACE SEQUENCE IF NOT EXISTS SCMSA_HIST.KEY_GEN_SEQ START WITH 0 INCREMENT BY 1 NOCYCLE NOCACHE; CREATE TABLE IF NOT EXISTS SCMSA_HIST.SCMSA_POS_TRANS_ROLLUP ( POS_TRANS_ID INTEGER DEFAULT (NEXT VALUE

我在H2数据库中创建了如下表:

CREATE OR REPLACE SEQUENCE IF NOT EXISTS SCMSA_HIST.KEY_GEN_SEQ
    START WITH 0
   INCREMENT BY 1
    NOCYCLE
    NOCACHE;

CREATE TABLE IF NOT EXISTS SCMSA_HIST.SCMSA_POS_TRANS_ROLLUP
(
 POS_TRANS_ID INTEGER DEFAULT 
    (NEXT VALUE FOR SCMSA_HIST.KEY_GEN_SEQ) 
    NOT NULL IDENTITY ,
 JOB_LOG_ID INTEGER,
 DEALER_CODE VARCHAR(255),
 STORE_ID VARCHAR(255),
 TRANSACTION_DT TIMESTAMP,
 QUANTITY INTEGER,
 ROLLUP_TYPE VARCHAR(255),
 CREATE_DT TIMESTAMP,
 MAX_TRANSACTION_DT TIMESTAMP,
 PROCESSED_FLAG VARCHAR(255),
 CREATE_MONTH INTEGER,
 CREATE_YEAR INTEGER
);
@Entity
@Table(schema = "SCMSA_HIST", name = "SCMSA_POS_TRANS_ROLLUP")
public class ScmsaPosTransRollup {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ")
    @SequenceGenerator(name = "SEQ", sequenceName = "SCMSA_HIST.KEY_GEN_SEQ")
    @Column(name = "POS_TRANS_ID")
    private Long posTransId;

    @Column(name = "JOB_LOG_ID")
    private Long jobLogId;

    @Column(name = "DEALER_CODE")
    private String dealerCode;

    @Column(name = "STORE_ID")
    private String storeId;

    @Column(name = "TRANSACTION_DT")
    private Timestamp transactionDate;

    @Column(name = "ROLLUP_TYPE")
    private String rollupType;

    @Column(name = "QUANTITY")
    private Integer quantity;

    @Column(name = "CREATE_DT")
    private Timestamp createDate;

    @Column(name = "MAX_TRANSACTION_DT")
    private Timestamp maxTransactionDate;

    @Column(name = "PROCESSED_FLAG")
    private String processedFlag;

    @Column(name = "CREATE_MONTH", insertable = false, updatable = false)
    private Integer createMonth;

    @Column(name = "CREATE_YEAR", insertable = false, updatable = false)
    private Integer createYear;


    public ScmsaPosTransRollup() {
    }
//getter and setter
}
上表的模型类别如下所示:

CREATE OR REPLACE SEQUENCE IF NOT EXISTS SCMSA_HIST.KEY_GEN_SEQ
    START WITH 0
   INCREMENT BY 1
    NOCYCLE
    NOCACHE;

CREATE TABLE IF NOT EXISTS SCMSA_HIST.SCMSA_POS_TRANS_ROLLUP
(
 POS_TRANS_ID INTEGER DEFAULT 
    (NEXT VALUE FOR SCMSA_HIST.KEY_GEN_SEQ) 
    NOT NULL IDENTITY ,
 JOB_LOG_ID INTEGER,
 DEALER_CODE VARCHAR(255),
 STORE_ID VARCHAR(255),
 TRANSACTION_DT TIMESTAMP,
 QUANTITY INTEGER,
 ROLLUP_TYPE VARCHAR(255),
 CREATE_DT TIMESTAMP,
 MAX_TRANSACTION_DT TIMESTAMP,
 PROCESSED_FLAG VARCHAR(255),
 CREATE_MONTH INTEGER,
 CREATE_YEAR INTEGER
);
@Entity
@Table(schema = "SCMSA_HIST", name = "SCMSA_POS_TRANS_ROLLUP")
public class ScmsaPosTransRollup {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ")
    @SequenceGenerator(name = "SEQ", sequenceName = "SCMSA_HIST.KEY_GEN_SEQ")
    @Column(name = "POS_TRANS_ID")
    private Long posTransId;

    @Column(name = "JOB_LOG_ID")
    private Long jobLogId;

    @Column(name = "DEALER_CODE")
    private String dealerCode;

    @Column(name = "STORE_ID")
    private String storeId;

    @Column(name = "TRANSACTION_DT")
    private Timestamp transactionDate;

    @Column(name = "ROLLUP_TYPE")
    private String rollupType;

    @Column(name = "QUANTITY")
    private Integer quantity;

    @Column(name = "CREATE_DT")
    private Timestamp createDate;

    @Column(name = "MAX_TRANSACTION_DT")
    private Timestamp maxTransactionDate;

    @Column(name = "PROCESSED_FLAG")
    private String processedFlag;

    @Column(name = "CREATE_MONTH", insertable = false, updatable = false)
    private Integer createMonth;

    @Column(name = "CREATE_YEAR", insertable = false, updatable = false)
    private Integer createYear;


    public ScmsaPosTransRollup() {
    }
//getter and setter
}

但是,当我尝试插入时,“POS_TRANS_ID”的值被插入为null。谁能告诉我我做错了什么。

我试图重现你的问题。对我有帮助的是: 1.剧本

CREATE OR REPLACE SEQUENCE IF NOT EXISTS KEY_GEN_SEQ
   MINVALUE 1 
   MAXVALUE 999999999999999999
   START WITH 1
   INCREMENT BY 500
NOCYCLE
NOCACHE;
在创建表DDL中,我替换了ID创建

 POS_TRANS_ID INTEGER DEFAULT  KEY_GEN_SEQ.NEXTVAL 
    NOT NULL IDENTITY ,
在Java类中,将initialValue和allocationSize添加到@SequenceGenerator,并将策略更改为SEQUENCE

@GeneratedValue(strategy=SEQUENCE, generator="SEQ")
@SequenceGenerator(name = "SEQ", sequenceName = "KEY_GEN_SEQ",initialValue = 1,allocationSize = 500)
别忘了在Hibernate道具中定义方言

hibernate.dialect=org.hibernate.dialect.H2Dialect

您是否尝试不使用自定义序列。只是“@GeneratedValue(strategy=GenerationType.AUTO)”?据我所知,此设置自动定义目标数据库的生成策略。@DanilaZharenkov我也有同样的问题。.我尝试了你的建议,但仍然不起作用