ORMLite列默认

时间:2018-02-10 22:25:49

标签: null sql-insert ormlite

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

@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上的那列?

1 个答案:

答案 0 :(得分:0)

  

有没有办法创建列,但也告诉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类型。顺便说一句,我刚刚纠正的在线文档中缺少此功能。