我在 PostgreSQl 表中实现搜索时遇到问题。该表包含导致错误的空字符串值的列。
来自列设计的一些信息: 数据类型:字符变化(20) 默认值:非 NULL:否 主键:否
我的列的 java 类注释:
@Column(name = "codeClient")
private String codeClient;
当没有“空字符串”值时,此查询字符串有效:
SELECT c FROM Client c WHERE c.id = 765432
我的 Json 回来了:
[{"id":765432,"nameClient":"JACK SMITH","codeClient":"234567890"}]
当我更改查询以处理空值时:
SELECT c.id, c.nameClient, CASE c.codeClient WHEN '' THEN 'nonexistent' else c.codeClient END FROM Client c WHERE c.id = 765432
查询有效,但 Json 结果缺少 de 列描述:
[[765432,"JACK SMITH","234567890"]]
为了解决这个问题,我将查询更改为返回一个对象:
SELECT new ClientDTO(c.id, c.nameClient, CASE c.codeClient WHEN '' THEN 'nonexistent' else c.codeCliente END) FROM Client c WHERE c.id = 765432
但是当结果为空字符串时,Hibernate 无法解决:
Java.lang.IllegalArgumentException: org.hibernate.QueryException: could not instatiate class [ClientDTO] from tuple
我尝试使用 JPA CriteriaBuilder。它适用于简单的查询,但由于复杂性,我无法实现我需要的查询。
我无法更改数据库设计,我需要 Json 结果。
任何人都可以帮助我吗?