【问题标题】:How to fix "Can't infer the SQL type to use for an instance of enum" error when inserting enum value?插入枚举值时如何修复“无法推断用于枚举实例的 SQL 类型”错误?
【发布时间】:2019-06-20 01:31:59
【问题描述】:

我正在尝试开发一个简单的 CRUD 应用程序,它以 JSON 格式接收数据,对其进行处理,并将其放入 PostgreSQL 表中。表中的字段之一,性别,由枚举表示。

这里我尝试使用 Postman 添加条目:

{
    "employeeId": 1,
    "firstName": "Ada",
    "lastName": "Lovelace",
    "departmentId": 3,
    "jobTitle": "Senior",
    "gender": "FEMALE",
    "dateOfBirth": "1815-12-10"
}

这是DAO层代码:

@Override
public void addEmployee(Employee employee) {
    String sql = "INSERT INTO employees(employee_id, first_name, last_name, department_id, job_title, gender, date_of_birth) VALUES (?, ?, ?, ?, ?, CAST(? AS gender), ?)";
    getJdbcTemplate().update(sql, employee.getEmployeeId(), employee.getFirstName(), employee.getLastName(),
            employee.getDepartmentId(), employee.getJobTitle(), employee.getGender(), employee.getDateOfBirth());
}

结果,我得到:500 Internal Server Error 和

"PreparedStatementCallback; bad SQL grammar [INSERT INTO employees(employee_id, first_name, last_name, department_id, job_title, gender, date_of_birth) VALUES (?, ?, ?, ?, ?, CAST(? AS gender), ?)]; nested exception is org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of com.way.dto.Gender. Use setObject() with an explicit Types value to specify the type to use."

【问题讨论】:

  • 这已经是answered。此外,您还应该发布员工表的数据库模型。
  • 我看到了这个问题,答案中指出的文章在类似的情况下帮助了我。感谢您的回复。

标签: java postgresql jdbc enums postman


【解决方案1】:

gender 字段是什么 SQL 类型?

除了传入枚举之外,您还可以传入等效的字符串,例如employee.getGender().name()employee.getGender().toString()

【讨论】:

  • 创建表时,我创建了类型“gender”作为枚举...一切正常,非常感谢
  • SQL 包装器被枚举混淆是很常见的,将它们串起来是最简单的解决方法。
猜你喜欢
  • 2018-10-18
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多