java - JPA CriteriaBuilder 喜欢双重

标签 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 字段上执行 like?

SQL 是

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

最佳答案

我还没有真正尝试过这个,但我相信它应该有效

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

这应该生成类似这样的查询:

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

关于java - JPA CriteriaBuilder 喜欢双重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43603951/

相关文章:

java - setHeader 不改变文件名

Java Choice 选定索引未正确返回

java - twitter4j 地理流媒体 新加坡及其他地区的纬度/经度

java - 如何使 BaseAdapter 显示 AlertDialog android 应用程序

PostgreSQL 和 JDBC 准备语句缓存

java - JPA - EntityManager 查找方法返回重复项

java - 使用 Hibernate @Column 注释而不使用 getter 和 setters 方法声明

java - 使用非自动生成的 ID 保存在 JPA/Hibernate 中的替代方法

java - Spring Data JPA QueryDslPredicateExecutor 找到不同的结果

java - 按非当前行的位置查找