首页 > 解决方案 > 如何在java中为DB2中定义的唯一键定义实体bean字段为TIMESTAMP DEFAULT CURRENT_TIMESTAMP?

问题描述

我试图弄清楚如何为具有唯一问题的表编写实体 bean ......特别是如何处理作为 TIMESTAMP 列的唯一键。我想让数据库使用其 DEFAULT 子句创建值。

我尝试添加@GeneratedValue(strategy = GenerationType.AUTO)到字段定义,将其从

@Id
@NotNull
@Column(name = "ROW_ADD_TS",
        columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
        insertable = false,
        updatable = false)
protected Timestamp rowAddDateTime; // WAS org.joda.time.DateTime

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ROW_ADD_TS",
        columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
        insertable = false,
        updatable = false)
protected Timestamp rowAddDateTime; // WAS org.joda.time.DateTime

并注释掉任何设置rowAddDateTime为 null 以外的值的代码。我也尝试过其他GenerationType值......都无济于事。

这是 DB2 版本的表定义和服务器上实际定义的唯一唯一索引。

CREATE TABLE X.LOGS
    (
        APP_NAM_TX CHARACTER(30) DEFAULT ' ' NOT NULL, 
        LOC_ID CHARACTER(3) DEFAULT ' ' NOT NULL,
        BIL_DIV_ID SMALLINT DEFAULT 0 NOT NULL, 
        USR_NAM_TX CHARACTER(20) DEFAULT ' ' NOT NULL,
        FRM_NAM_TX CHARACTER(30) DEFAULT ' ' NOT NULL, 
        ROW_ADD_TS TIMESTAMP DEFAULT CURRENT TIMESTAMP NOT NULL, 
        ACN_CD CHARACTER(2) DEFAULT ' ' NOT NULL, 
        ACN_DTL_TX VARCHAR(255) DEFAULT '' NOT NULL, 
        DRN_AM DECIMAL(7, 2) DEFAULT 0.0 NOT NULL, 
        ADL_DRN_AM DECIMAL(7, 2) DEFAULT 0.0 NOT NULL, 
        RCD_CNT_QY INTEGER DEFAULT 0 NOT NULL, 
        QRY_CNT_QY SMALLINT DEFAULT 0 NOT NULL, 
        USR_NAM_DTL_TX CHARACTER(60), 
        DAB_NAM_ID SMALLINT DEFAULT 0
    );

CREATE UNIQUE INDEX X.LOGS_1IX ON X.LOGS
    (
        ROW_ADD_TS, APP_NAM_TX, LOC_ID, BIL_DIV_ID, USR_NAM_TX, FRM_NAM_TX
    )   ALLOW REVERSE SCANS;

标签: javajpasql-timestamp

解决方案


推荐阅读