В настоящее время я работаю над бэкенд-приложением Spring. У нас есть объект Partner
с аннотацией @GeneratedValue(strategy = GenerationType.IDENTITY
для автоматического создания первичных ключей. Первичный ключ partnerId
имеет тип long
.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "partner_id")
private long partnerId;
В нашем Partner
классе контроллеров мы написали некоторые функции для основных операций CRUD. Когда мы делаем post
вызов для добавления партнера, мы пропускаем первичный ключ partnerId
и включаем информацию для других полей. Сообщение успешно, и данные можно увидеть в базе данных.
Однако, когда мы пытаемся позвонить put
, чтобы обновить только что добавленного Партнера, вместо этого создается новая запись Партнера в таблице Партнеров.
Сначала это казалось проблемой на уровне кода, но мы протестировали вызов put
для одной из записей, которые мы добавили в таблицу из нашего базового набора данных, она работает нормально. Мы использовали FindById()
и isPresent()
, чтобы узнать, существует ли запись для этого нового пользователя с partnerId
из входящего объекта Partner из вызова put
, но полученного false
. Но с одной из 3 существующих записей Партнеров, которые мы добавили в базу данных вручную с запросами, они вернули true
.
@RequestMapping(method = RequestMethod.PUT, value = PATH)
public ResponseEntity<?> updatePartner(@RequestBody Partner partner) {
...
System.out.println(partnerRepository.findById(partner.getPartnerId()).isPresent());
}
Кажется, что вызов post
устанавливает новый объект Partner в базе данных, но каким-то образом partnerId
любой новой опубликованной записи не относится к типу long
, что нарушает findById().isPresent()
. Мне просто интересно, знает ли кто-нибудь, почему это происходит, поскольку наша сущность устанавливает первичный ключ для типа long
, и контроллер отправляет в базу данных объект Partner
.