我有一个未定义的默认值:
@DatabaseField(dataType = DataType.TIME_STAMP, columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL")
private Date createdDate;
尝试使用createdDate
字段unset保存一行时,我会收到以下错误:
[SQLITE_CONSTRAINT_NOTNULL] A NOT NULL constraint failed (NOT NULL constraint failed:
Ormlite可能正在尝试将NULL
值明确插入字段。将persisted = false
添加到注释中可以避免这种情况,但是在表创建上未创建列。
有没有一种方法来创建列,但是还告诉ormlite忽略插入的该列吗?
有没有一种方法来创建列,但也告诉ormlite忽略插入上的该列?
您缺少的是@DatabaseField
的readOnly = true
设置。引用javadocs:
如果此字段是仅读取字段,则将其设置为true(默认为false(。该字段将通过查询返回,但是在插入/创建语句中将忽略它。[只是添加:]这可以用来表示创建或修改日期,并由数据库生成的值。
。
我只使用了以下字段定义(至少使用H2(,并且效果很好:
@DatabaseField(columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL",
readOnly = true, canBeNull = false)
private Date createdDate;
您不需要指定dataType
,如果这样做,您相信您的字段应该是Timestamp
类型。顺便说一句,我刚刚纠正的在线文档中缺少此功能。