2016-09-29 5 views
2

У меня есть объектную модель, которая выглядит следующим образом:Почему 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, где еще я должен посмотреть, почему это поле неправильно настроено?

+0

В какой базе данных у вас есть? Вы проверили, что столбец «RATE» существует в базе данных? – Kuchi

+0

Так что другие столбцы обновляются и оцениваются, не так ли? У вас аннотация @transactional? – ZaoTaoBao

+0

Столбец RATE существует, является 'VARCHAR (128)' (более чем достаточно) и является 'nullable'. Я пробовал маркировать вызывающий метод как '@ Transactional', и это достигало такого же эффекта. Но да, другие колонки обновляются просто отлично. – mike

ответ

0

Вот действительно дикая часть. Кажется, моя проблема была решена путем перезапуска IntelliJ. На самом деле трудно понять, что пошло не так.

Я начал с переименования столбца в БД на что-то еще, но оставил все остальные конфигурации одинаковыми. Я отметил, что не было исключений и пытались выяснить, почему Spring Repository должен кричать на меня для неправильно настроенных объектов. После нескольких более причудливых событий я подумал, что лучше всего перезапустить IntelliJ, на всякий случай.

Вдруг он правильно подобрал колонку, неправильно названную. Я переименовал столбец назад в то, что он должен быть, и все работает должным образом. Действительно странно.

Смежные вопросы