0

I have a non null column defined with a default:

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

When trying to save a row with the createdDate field unset, I get the following error:

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

ORMLite is probably trying to explicitly insert a NULL value into the field. Adding persisted = false to the annotation avoids this, but then the column isn't being created on table creation.

Is there a way to create the column, but to also tell ORMLite to ignore that column on INSERT?

Gray
  • 115,027
  • 24
  • 293
  • 354
Trent Di
  • 65
  • 5

1 Answers1

0

Is there a way to create the column, but to also tell ORMLite to ignore that column on INSERT?

What you were missing is the readOnly = true setting for @DatabaseField. To quote the javadocs:

Set this to be true (default false) if this field is a read-only field. This field will be returned by queries however it will be ignored during insert/create statements. [ just added: ] This can be used to represent create or modification dates with the values being generated by the database.

I just used the following field definition (with H2 at least) and it worked fine:

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

You don't need to specify the dataType and if you do, your field should be a Timestamp type I believe. Btw, this feature was missing from the online documentation which I just rectified.

Gray
  • 115,027
  • 24
  • 293
  • 354