GenerationType.IDENTITY
- самый простой способ достичь этого. IDENTITY указывает, что столбцы IDENTITY базы данных будут использоваться для генерации значения первичного ключа.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ROWID")
private String rowId;
Но это не единственное изменение, которое вам может понадобиться. Ваш столбец ROWID
должен быть своего рода автоинкрементным в вашей базе данных.
В Oracle IDENTITY поддерживается с версия 12 c и выглядит следующим образом:
CREATE TABLE t1 (
c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, // this line
c2 VARCHAR2(10)
);
Итак, я бы также изменил private String rowId;
на private Long rowId;
, если вы хотите, чтобы это работало с Oracle DB, и только после этого при сохранении автоматически сгенерированное значение будет вставлено в этот столбец.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ROWID")
private Long rowId;
Некоторые детали отсутствуют, поэтому давайте представим, что у вас есть хранилище:
public interface SomeRepository extends CrudRepository<YourEntity, String> {}
Если вы хотите сохранить что-то в БД, вы должны сделать что-то вроде этого:
...
YourEntity entity = new YourEntity();
// YOU DON'T SET rowId ! Remain it null
entity.setClientId(123);
entity.setAcctNo("123456");
// set all the other fields
...
И в каком-то месте вы бы позвонили:
...
YourEntity persisted = someRepository.save(entity);
...
Как только вы сохранитесь, у этого persisted
будет rowId
(в общем случае поле с аннотацией @Id) не null
, но с некоторым значением, которое генерируется и устанавливается в это поле.