Spring Data查询PostgreSQL含斜杠Varchar字段内容被截断求助
以下是针对该问题的具体排查和解决思路:
检查实体类字段的ORM映射配置
确认@Column注解是否有误配置,比如是否不小心指定了columnDefinition为PostgreSQL的PATH类型(该类型会自动解析斜杠分割的路径),导致映射时只取了路径的最后一部分。需要明确指定映射为普通varchar类型:@Column(name = "file_name", columnDefinition = "varchar(255)") private String fileName;排查查询语句的正确性
开启Spring Data的SQL日志,查看自动生成或自定义的查询语句是否存在截断逻辑:
在application.yml中添加日志配置:logging: level: org.springframework.data.jpa.repository.query: DEBUG org.hibernate.SQL: DEBUG检查日志中的SQL是否对
file_name使用了split_part、substring等截断函数,或者自定义JPQL/SQL是否误写了截取后半部分的逻辑。验证数据库存储的原始数据
直接通过PostgreSQL客户端执行查询语句,确认目标记录的file_name字段存储的是完整值(比如bucket_a/filexyz.doc)。如果数据库中本身就是截断后的值,问题出在数据插入环节,需要检查插入代码是否对文件名做了不必要的截取处理。检查结果映射逻辑
如果使用了自定义结果映射(比如@SqlResultSetMapping、自定义RowMapper),排查映射代码中是否存在对fileName字段的字符串截取操作,比如误用StringUtils.substringAfter等方法处理字段值。排查驱动或框架版本问题
确认PostgreSQL JDBC驱动版本是否存在已知的字符串映射bug,尝试升级到最新稳定版(如42.6.x系列);同时检查Spring Data JPA/Hibernate版本,必要时升级到兼容的稳定版本。
内容的提问来源于stack exchange,提问作者user1555190

