我试图对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
有什么建议吗?
答案 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
值时会报告此错误。