У меня есть объектную модель, которая выглядит следующим образом:Почему CrudRepository игнорирует @Column?
public class Agreement {
@Id @Column(name = "AGREEMENT_ID") private String agreementId;
@Column(name = "RATE") private String rate;
@Column(name = "NOTE") private String note;
... // A number of other fields
}
Каждое поле имеет методы получения и установки, генерируемые с помощью IntelliJ, проверить это все правильно. В моем графическом интерфейсе пользователь может внести изменения в соглашение, а затем нажать «Сохранить». Теперь мой сервер должен сделать обновление на задней панели. Я использую Spring Хранилище и поэтому у меня есть:
@Repository
public interface AgreementRepository extends CrudRepository<Agreement, String> {}
Когда пользователь делает представление Призывает agreementRepository.save(agreement)
. Однако одно из моих полей, rate
не обновляется на задней панели.
Я перешагнул код и подтвердил, что свойство rate
установлено правильно в объекте agreement
, переданном save()
. Кроме того, я напечатал SQL и проверил, что на самом деле на этом уровне проблема возникает, отмечая, что метод save()
вызывает SELECT
, за которым следует UPDATE
, как и ожидалось, так как я изменяю одну и ту же запись снова и снова но я вижу в части запроса UPDATE
ясно, что поле rate
не установлено.
Ст. Все еще, ВСЕ другие поля устанавливаются правильно, независимо от того, устанавливаю ли я также RATE
или нет. Все остальные изменения распространяются просто отлично. Нет ничего необычного в этом поле RATE
. Я подумал, может быть, был плохой триггер или что-то, что разработчик передо мной вложил, но я вижу, что SQL-код UPDATE
, созданный Spring, явно не устанавливает его и не проверяет, нет ли таких триггеров.
В чем причина, по которой CrudRepository.save()
игнорирует одно из моих полей? Он не помечен @Transient
и не является чем-то необычным. Если это не CrudRepository
, где еще я должен посмотреть, почему это поле неправильно настроено?
В какой базе данных у вас есть? Вы проверили, что столбец «RATE» существует в базе данных? – Kuchi
Так что другие столбцы обновляются и оцениваются, не так ли? У вас аннотация @transactional? – ZaoTaoBao
Столбец RATE существует, является 'VARCHAR (128)' (более чем достаточно) и является 'nullable'. Я пробовал маркировать вызывающий метод как '@ Transactional', и это достигало такого же эффекта. Но да, другие колонки обновляются просто отлично. – mike