Faced a problem with returning the autogenerated id for new rows being created for a postgres table through spring – mybatis.
@Insert("insert into user (name) values (#{name})")
public void insertActor(User user);
One solution ofcourse was to simply get nextval from the sequence, but I wanted something cleaner where I need not be worried about multithreading issues.
Solution one Tried: One good solution found for postgres was using “Returning” keyword with Insert statement
insert into user (name) values (#{name}) Returning id;
Somehow that did not work with mybatis.
Solution that worked:
@Options(useGeneratedKeys=true, keyProperty = "userId", keyColumn="id")
@Insert("insert into user (name) values (#{name})")
public void insertActor(User user);
@Options, with useGeneratedKeys flag worked just fine. keyProperty defined the property name in Java and keyColumn name defined name of column in table.