Сохранение перечисленного значения JPA @в базе данных

#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"")  

и посмотрите, как это работает лучше.