Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何避免对基于数字的列进行部分匹配的类型转换_Hibernate_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

Hibernate 如何避免对基于数字的列进行部分匹配的类型转换

Hibernate 如何避免对基于数字的列进行部分匹配的类型转换,hibernate,jpa,spring-data,spring-data-jpa,Hibernate,Jpa,Spring Data,Spring Data Jpa,我正在使用一个遗留数据库,并使用SpringDataJPA访问存储库。其中一个表具有数字数据类型的id列,但要求能够使用通配符执行部分匹配。所以12应该匹配1234。如果我正在编写本机查询,我可以 从id为12%的表格中选择* 但是,当使用提供类型安全性的Spring JPA Criteria API时,我必须先进行类型转换,然后才能使用like运算符 cb.like(root.get(SomeEntity_.id).as(String.class), str + "%") 请注意,我必须添加

我正在使用一个遗留数据库,并使用SpringDataJPA访问存储库。其中一个表具有数字数据类型的id列,但要求能够使用通配符执行部分匹配。所以12应该匹配1234。如果我正在编写本机查询,我可以

从id为12%的表格中选择*

但是,当使用提供类型安全性的Spring JPA Criteria API时,我必须先进行类型转换,然后才能使用like运算符

cb.like(root.get(SomeEntity_.id).as(String.class), str + "%")
请注意,我必须添加.as(String.class)才能使用
like
操作符执行字符串匹配。这将导致数据类型转换,查询无法从id索引中获益

cast(表0\u 1\u.id为varchar(255))喜欢吗?


有没有一种方法可以在不必执行类型转换的情况下执行此基于数字的列的like匹配?

我只想指出,对数字数据类型应用
like
操作可能会产生不可预测的结果,请参阅以获取SQL Server的警告

要记住的另一件事是,有时当数据类型不同或特定操作暗示特定数据类型要求时,数据库会执行就地强制值

因此,即使您编写的
id像12%
,您有什么证据表明内部没有被强制转换为
CAST(id像VARCHAR(255))像'12%'


但是为了明确回答您的问题,JPA
CriteriaBuilder
类明确显示,当您希望使用
like()
操作时,表达式必须是
String
数据类型。因此,你要么按照你的帖子所示的方式进行转换,要么确保专栏已经是上述类型。

有意义。谢谢你的参考。