JPA CriteriaBuilder喜欢双倍

时间:2017-04-25 07:11:56

标签: java jpa spring-data-jpa jpa-criteria

我正在尝试从旧数据库中检索数据。

表中的列定义为包含帐号的DECIMAL(13,0)。

无法更改列数据类型,因为它会对旧系统产生重大影响。基本上所有使用该表的程序都需要更改,然后重新编译,这不是一个选项。

我们要求查找帐号包含值的所有记录,例如用户可以搜索12345,并且应返回帐号为12345的所有帐户。

如果这是CHAR / VARCHAR,我会使用:

criteriaBuilder.like(root.<String>get(Record_.accountNumber), searchTerm)

由于列定义为DECIMAL(13,0),accountNumber属性为double。

有没有办法在DECIMAL / double字段上执行类似的操作?

SQL将是

SELECT * FROM ACCOUNTS WHERE accountNumber LIKE '%12345%'

1 个答案:

答案 0 :(得分:5)

我实际上没有尝试过这个,但我相信它应该可行

criteriaBuilder.like(
    root.get(Record_.accountNumber).as(String.class),
    searchTerm)

这应该生成一个类似的查询:

SELECT * FROM ACCOUNTS WHERE CAST(accountNumber AS text) LIKE '%12345%'