【发布时间】:2013-04-08 02:50:42
【问题描述】:
我在 PostgreSQl 表中实现搜索时遇到问题。该表包含具有空字符串值的列,这些列会导致错误。
来自专栏设计的一些信息: 数据类型:字符变化(20) 默认: 非空:否 主键:否
我的列的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 结果缺少列描述:
[[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 结果。
有人可以帮帮我吗?
【问题讨论】:
-
你使用哪个版本的 Hibernate?
-
另外,我认为您的 JSON 编组器可能存在问题。您应该指示它也包含空值。可能您的第二个 Hibernate 查询可以正常工作,但您的 JSON 编组器不能。