Обновление сущности JPA завершается неудачно при нулевом значении - PullRequest
2 голосов
/ 02 марта 2011

Я использую JPA (Hibernate) для хранения сущности на сервере MySQL 5.0.

Вот сущность в упрощенном виде:

@Entity
@Table(name = "messages")
public class Message implements Serializable
{
    @Id
    @GeneratedValue
    @Column
    private long id;

    @Column
    private String content;

    @Column(insertable = false)
    private Date read;

    @Column(insertable = false)
    private Date deleted;
}

Столбцы «прочитано» и «удалено» в таблице «сообщения» определены так, что они могут содержать значения NULL. Когда я впервые попытался сохранить одну из этих сущностей, я получил исключение. Очевидно, что Hibernate делал там, перечисляя столбцы «прочитано» и «удалено» в списке столбцов оператора вставки, но не в списке значений. Я обошел эту проблему с помощью оператора "inserttable = false" в аннотациях @Column, которые вы видите выше.

Теперь, однако, у меня есть большая проблема. Я хочу установить для полей чтения или даты ненулевые значения. Когда я это делаю, я получаю похожее исключение «В вашем синтаксисе SQL есть ошибка». Теперь он перечисляет все поля в части where оператора update, включая «read» и «удалено». И то, что он делает, это проверяет как "... and read = NULL". Что в MySQL, конечно, должно быть "... и читать IS NULL".

Покопавшись, я уже нашел «обновляемый» параметр для аннотации @Column. Но если я установлю это в false, и «чтение», и «удаление» вообще никогда не обновляются, так что это тоже не то, что я ищу.

... Помощь

1 Ответ

3 голосов
/ 02 марта 2011

read - зарезервированное слово в mysql , и похоже, что драйвер не экранирует имя с обратными кавычками.Я думаю, что лучшее решение - переименовать колонку.

...