Spring Data JDBC中保留字列名无法映射实体属性的问题求助
Spring Data JDBC中实体属性为SQL保留字的映射问题
我遇到的问题和JPA里处理SQL保留字的场景类似,但使用的是Spring Data JDBC。实体定义如下:
@Table("TEST_TABLE") @Data public class TestTableEntity { @Id private int id; private int order; }
调用CrudRepository提供的方法时,报错:Incorrect syntax near the keyword 'order',生成的SQL语句为:
Executing prepared SQL statement [SELECT TEST_TABLE.id AS id,
TEST_TABLE.order AS order FROM TEST_TABLE]
为解决语法错误,我给order属性添加了@Column("\"ORDER\"")注解,此时生成的查询语句变为:
Executing prepared SQL statement [SELECT TEST_TABLE.id AS id,
TEST_TABLE."ORDER" AS "ORDER" FROM TEST_TABLE]
语法错误消失了,但列值到实体属性的映射失败,order属性始终返回0。
我还尝试重写NamingStrategy的getColumnName方法,问题仍未解决,代码如下:
@Bean public NamingStrategy namingStrategy() { return new NamingStrategy() { @Override public String getColumnName(RelationalPersistentProperty property) { Assert.notNull(property, "Property must not be null."); return "\"" + ParsingUtils.reconcatenateCamelCase(property.getName(), "_") + "\""; } }; }
问题似乎出在AS "ORDER"子句上,它把双引号当成了列别名的一部分,导致无法正确映射到实体的order属性。
恳请各位提供建议或见解。
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

