#java #spring #jpa #spring-data-jpa
#Ява #весна #jpa #весна-данные-jpa
Вопрос:
Я пытаюсь сохранить @Перечисленное значение в базе данных:
@Entity public class Macronutrient { public enum Group { CARBOHYDRATE, PROTEIN, FAT } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Size(min = 3, max = 255) @NotBlank @Column(unique = true) private String name; @Enumerated(EnumType.STRING) private Group group; //getters and setters }
Я отправляю запрос на исправление для изменения существующего макроэлемента:
PATCH /macronutrients { "id": 1, "name": "Macronutrient", "group": "CARBOHYDRATE" }
Код, ответственный за обработку обновления:
public Macronutrient patchMacronutrient(Macronutrient macronutrient) { ... if (Objects.nonNull(macronutrient.getGroup())) { existingMacronutrient.setGroup(macronutrient.getGroup()); } ... }
Ответ, который я получаю: ОШИБКА: синтаксическая ошибка в «группе»или рядом с ней
Hibernate: update public.macronutrient set group=?, name=? where id=?
Если я НЕ установлю group
свойство на макроэлемент, то оно будет сохранено правильно. Пожалуйста, помогите!
Комментарии:
1.
group
Существует ли столбец в базе данных?2. группа-это зарезервированное ключевое слово в mysql, я бы предложил назвать его nutrientGroup или что-то в этом роде
Ответ №1:
Возможной причиной может быть то, что «группа» является зарезервированным словом (подумайте о выражениях «группировать по»). Вы можете попробовать сделать следующее: заключите имя столбца в обратные метки
@Column(name="`group`") private Group group;
В JPA 2.0 синтаксис немного отличается:
@Column(name=""group"")
и посмотрите, как это работает лучше.