Мое требование - заставить hibernate извлекать последнее значение для PI, уже доступного в существующей таблице, и добавлять новую запись, увеличивая максимальное значение PI на единицу.
Ниже приведена моя реализация класса Entity
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
private String name;
}
Ниже мой класс, через который я ввожу значение в User
таблицу
@PostMapping("/jpa/users")
public void addUser(@Valid @RequestBody User user)
{
User saved = userRepository.save(user);
}
В моей пользовательской таблице уже есть значения ниже, чем я запускаю приложение
id name
1 sample_name_1
2 sample_name_2
Теперь, когда я запускаю свое приложение и пытаюсь вставить новое значение в таблицу User, оно должно ввести новую запись с PI
как 3
Пример: Ниже приведено тело запроса JSON (Входные данные)
{
"name": "sample_name_3"
}
выдает приведенную ниже ошибку
{
"timestamp": "2018-05-01T23:09:31.806+0000",
"status": 500,
"error": "Internal Server Error",
"message": "could not execute statement; SQL [n/a]; constraint [\"PRIMARY KEY ON PUBLIC.USER(ID)\"; SQL statement:\ninsert into user (name, id) values (?, ?) [23505-197]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
"path": "/jpa/users"
}
Я понимаю, что возникла ошибка противопоказаний PrimaryIndex. Он пытается вставить новую запись с PI
как 1
Если моя таблица user
пуста, и когда я вставляю пару записей, она добавляет новые автоматически увеличиваемые значения.
Итак, я думаю, что Hibernate не читает последнее значение столбца id
из таблицы user
.
Какую аннотацию я должен использовать, чтобы hibernate считывал последнее значение id
каждый раз перед вставкой новой записи.
PS: я уже опробовал нижеприведенную стратегию, и ничего из этого не работает
GenerationType.TABLE
GenerationType.AUTO
GenerationType.SEQUENCE
GenerationType.IDENTITY