我有一个使用默认值定义的非空列:
@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上的那列?
答案 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
类型。顺便说一句,我刚刚纠正的在线文档中缺少此功能。