I submitted this issue at: https://github.com/h2database/h2database/issues/1391
and redirected here. In Spring, there is an interface "org.springframework.data.domain.Persistable<ID>", which helps to mark the "insertability/updatibility" of an entity. It requires the implementation of two methods: public interface Persistable<ID extends Serializable> extends Serializable { /** * Returns the id of the entity. * * @return the id */ ID getId(); /** * Returns if the {@code Persistable} is new or was persisted already. * * @return if the object is new */ boolean isNew(); } If is new, the object should be persisted; otherwise the DB should update it. Usually, we use this snippet to implement it: @Transient private boolean isNewObject; @Override public boolean isNew() { return isNewObject; } We change `isNewObject` to change the behavior of DB. `isNewObject` to the behavior of DB. Why we need it? Because we want to first save, then if there was some duplication, we catch an DataIntegrityViolationException and change `isNewObject()` to `false` and `save()` again, then the update will be performed, instead of doing a full-table "select" (exist() check, etc) before saving. When testing in PostgreSQL, it works; but with in-memory H2, there is no exception thrown, and `isNew`, after persisting any object, will be changed to "true". Is this interface taken into consideration in H2? I ask to confirm; if is not, I will try to use PostgreSQL(the real DB engine) in my testing, although I want to use H2 in-memory DB when doing a minimal integration tests because it is supposed to be faster. -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to h2-database+unsubscr...@googlegroups.com. To post to this group, send email to h2-database@googlegroups.com. Visit this group at https://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.