Обновление spring-data-jdbc с идентификатором обновлений методов сохранения репозитория - PullRequest
0 голосов
/ 05 июля 2019

Вызов CrudRepository save () Метод для объекта, который НЕ является новым, создает следующее sql: ОБНОВЛЕНИЕ карты SET SET = =, customer_id =?... WHERE id =?

Возникает исключение Невозможно обновить столбец идентификаторов 'id'

Идентификатор генерируется базой данных

используемая версия: 1.0.6.RELEASE & 1.0.9.RELEASE

DB: mssql

Почему оператор обновления пытается обновить столбец идентификатора, поскольку он является первичным ключом?

Сущность:

import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Column;
import org.springframework.data.relational.core.mapping.Table;

@Table("card")
public class Card {

    @Id
    private Long id;

    @Column("customer_id")
    private String customerId;
...

Хранилище:

public interface CardRepository extends CrudRepository<Card, String> {
}

Ответы [ 3 ]

2 голосов
/ 05 июля 2019

Звучит как https://jira.spring.io/browse/DATAJDBC-262, который был исправлен и выпущен в версии 1.1.M1, текущая версия этой ветви разработки - 1.1.RC1.

Переход на эту версию должен решить проблему.

Примечание. Я видел исключение, которое вы упомянули только в MS-SqlServer, который еще не полностью поддерживается.

0 голосов
/ 05 июля 2019

Если у объекта есть поле первичного ключа, не помеченное @GeneratedValue, автоматическое значение первичного ключа не генерируется, и приложение отвечает за установку первичного ключа путем инициализации поля первичного ключа.Это должно быть сделано до любой попытки сохранить объект сущности.Кроме того, я думаю, что вам нужно реализовать Hashcode и Equals для сущности Card.

0 голосов
/ 05 июля 2019

Похоже, вы не установили стратегию генерации идентификатора для идентификатора.Добавьте это и попробуйте, если оно работает.

@GeneratedValue(strategy = GenerationType.AUTO) 
...