一尘不染

为什么setParameter不设置参数?

hibernate

我正在使用以下代码(尝试)查询数据库:

Query query = session.createQuery("from Trace where service = :service");
query.setParameter("service", clientRequest[0]);

其中clientRequest [0]来自字符串数组,服务变量是POJO中的字符串,映射到MySQL数据库中的VARCHAR(45)。

当我运行此代码时,Hibernate将执行的SQL查询显示为:

Hibernate: select trace0_.traceId as traceId0_, trace0_.service as service0_, trace0_.longitude as longitude0_, trace0_.latitude as latitude0_, trace0_.timestamp as timestamp0_ from trace trace0_ where trace0_.service=?

这使我相信clientRequest [0]的值未正确设置为参数。

我检查了clientRequest
[0]包含一个有效的String,它确实这样做。我尝试了其他创建查询的方法,但是这些方法都没有起作用,它们始终将服务显示为“?”,而如果使用明显的方法:

Query query = session.createQuery("from Trace where service = 21");

它自然会给出正确的响应

Hibernate: select trace0_.traceId as traceId0_, trace0_.service as service0_, trace0_.longitude as longitude0_, trace0_.latitude as latitude0_, trace0_.timestamp as timestamp0_ from trace trace0_ where trace0_.service=21

什么可能会阻止setParamater正常工作?


阅读 235

收藏
2020-06-20

共1个答案

一尘不染

预期以日志形式输出。Hibernate不会在查询字符串中记录参数。参数设置正确。如果未设置参数,则会看到异常。

如果您还想记录参数值,则可以从此处找到一些说明。

2020-06-20