JPA/Hibernate比较浮动失败,小数点为

JPA/Hibernate比较浮动失败,小数点为,hibernate,jpa,Hibernate,Jpa,我正在使用JPA/Hibernate查询一个表。我需要检索浮点列中值为“2.1”的所有行 Java模型 @Column(name = "MANAGEMENT_API_VERSION") private Float managementAPIVersion; sql 我使用JPA/Hibernate CriteriaBuilder在与另一个表连接时为查询添加一个条件 Expression<Float> managementAPIVersion = deviceSupportApiVe

我正在使用JPA/Hibernate查询一个表。我需要检索浮点列中值为“2.1”的所有行

Java模型

@Column(name = "MANAGEMENT_API_VERSION")
private Float managementAPIVersion;
sql

我使用JPA/Hibernate CriteriaBuilder在与另一个表连接时为查询添加一个条件

Expression<Float> managementAPIVersion = deviceSupportApiVersionJoin.<Float>get("managementAPIVersion");

Expression<Float> mgmtApiVer = cb.literal(Float.valueOf(mgmtApiVersion));
conditions.add(cb.equal(managementAPIVersion, mgmtApiVer));
带引号的sql查询返回一个匹配项,而不带引号的sql查询不返回任何匹配项


我必须在CriteriaBuilder查询或映射中更改什么,以强制Hibernate以正确的方式查询浮点。

没有理由在浮点数字周围加引号(即从字符串直接转换为浮点表示形式)。。。这不是“正确的方式”。如果要比较字符串,请将float字段作为字符串放入类中。或者,在浮点值介于2个值之间的情况下执行查询。我不寻找字符串比较。我所要做的就是确保值为2.1f SQL对于没有带=或>=比较引号的浮点不起作用。如果我加上引号,它确实有效。
Expression<Float> managementAPIVersion = deviceSupportApiVersionJoin.<Float>get("managementAPIVersion");

Expression<Float> mgmtApiVer = cb.literal(Float.valueOf(mgmtApiVersion));
conditions.add(cb.equal(managementAPIVersion, mgmtApiVer));
from devices device0_ inner join supported_api_versions supporteda1_ on device0_.id=supporteda1_.device_id where supporteda1_.management_api_version=2.1