【问题标题】:Saving JPA @Enumerated value into the database将 JPA @Enumerated 值保存到数据库中
【发布时间】:2022-01-12 16:52:20
【问题描述】:

我正在尝试将@Enumerated 值保存到数据库中:

@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 请求以修改现有的宏量营养素:

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=?

如果我没有在 Macronutrient 上设置 group 属性,那么它会正确保存。 请帮忙!

【问题讨论】:

  • 数据库中是否存在group 列?
  • group 是 mysql 中的保留关键字,建议命名为 nutrientGroup 之类的

标签: java spring jpa spring-data-jpa


【解决方案1】:

一个可能的原因是“group”是一个保留字(想想“group by”表达式)。 您可以尝试一下:将列名括在反引号中

@Column(name="`group`")
private Group group;

在 JPA 2.0 中,语法有点不同:

@Column(name="\"group\"")

看看效果更好。

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 2017-12-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多