以 UUID 作为参数的 Hibernate 命名查询

Hibernate named query with UUID as parameter

我正在尝试对 Postgres 数据库使用命名查询 select 具有给定 UUID(用作外键)的所有行。这是正在调用的命名查询。

  @NamedNativeQuery(name = "getAllXByFK",
  query = "SELECT * FROM table n WHERE FK = :param",
    resultClass = Foobar.class)})

我使用 java.util.UUID 类型设置参数。

query.setParameter(param.getKey(), param.getValue());

使用query.list()获取ResultSet时报如下错误:

错误:运算符不存在:uuid = bytea

有什么建议吗?

通常当您为绑定参数提供 null 值时会报告此错误。

不是很漂亮,但这对我有用:

SQL:

SQLQuery query = session.createSQLQuery("... where cast(c.id as varchar) = :id ");

参数设置如下:

query.setString("id", myUUID.toString());

我只是想知道如果对列执行转换,PostgreSQL 是否仍然使用 id 上的索引...?

编辑:

使用 Hibernate 5.0.9 奇怪的是我不需要丑陋的转换,我可以按预期设置参数:

query.setParameter("id", myUUID);

编辑 2019-05-11:

对于 SQL 查询,我现在倾向于在我的 Hibernate 项目中使用 jdbcTemplate。只需自动装配并使用它:

@Autowired
private NamedParameterJdbcTemplate  jdbcTemplate;

// ...

MapSqlParameterSource p = new MapSqlParameterSource("name", "value");
p.addValue("anotherParam", true);
List<Map<String, Object>> result = jdbcTemplate.queryForList("select ... where id = :name", p);