Hibernate使用UUID作为参数命名查询

时间:2015-02-13 05:10:37

标签: java hibernate uuid

我试图对Postgres数据库使用命名查询来选择具有给定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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

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);

答案 1 :(得分:0)

通常在为bind参数提供null值时会报告此错误。