Я использую MySQL и имею следующую сущность:
class MyEntity {
@Id
@GeneratedValue(strategy=IDENTITY)
@Column(name="id")
private Integer id;
}
Однако я все же хотел бы иметь возможность установить идентификатор вручную!
Проблема в том, что INSERT никогда не вставит столбец id. Например, когда
делаем это:
MyEntity e = new MyEntity();
e.setId(15);
em.persist(e);
em.flush();
em.refresh(e);
Будут выполнены следующие запросы:
INSERT INTO myEntities (col1, col2, col3) VALUES (?, ?, ?)
SELECT id, col1, col2, col3 FROM myEntities WHERE (id = 15)
И, таким образом, идентификатор будет по-прежнему генерироваться автоматически, а refresh()
результат в EntityNotFoundException
.
Если я вообще не установлю @GeneratedValue
, то этот случай будет работать нормально,
но когда значение генерируется автоматически, LAST_INSERT_ID()
вызываться не будет.
Можно ли вообще устанавливать столбцы идентификаторов как вручную, так и
автоматически, как в MySQL?