【问题标题】:ORMLite column with default具有默认值的 ORMLite 列
【发布时间】:2018-02-10 22:25:49
【问题描述】:

我有一个使用默认值定义的非空列:

@DatabaseField(dataType = DataType.TIME_STAMP, columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL") private Date createdDate;

在尝试保存未设置 createdDate 字段的行时,我收到以下错误:

[SQLITE_CONSTRAINT_NOTNULL] A NOT NULL constraint failed (NOT NULL constraint failed:

ORMLite 可能正在尝试将NULL 值显式插入到字段中。将persisted = false 添加到注释中可以避免这种情况,但是在创建表时不会创建该列。

有没有办法创建列,但也告诉 ORMLite 在 INSERT 时忽略该列?

【问题讨论】:

    标签: null sql-insert ormlite


    【解决方案1】:

    有没有办法创建列,但也告诉 ORMLite 在 INSERT 时忽略该列?

    您缺少的是readOnly = true setting for @DatabaseField。引用 javadocs:

    如果此字段是只读字段,则将此设置为 true(默认为 false)。该字段将由查询返回,但在插入/创建语句期间将被忽略。 [刚刚添加:] 这可用于使用数据库生成的值来表示创建或修改日期。

    我刚刚使用了以下字段定义(至少使用 H2)并且效果很好:

    @DatabaseField(columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL",
        readOnly = true, canBeNull = false)
    private Date createdDate;
    

    您不需要指定dataType,如果您这样做,我相信您的字段应该是Timestamp 类型。顺便说一句,我刚刚纠正的在线文档中缺少此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多