以 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);
我正在尝试对 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);