当我在PostgreSQL 13中创建像name
或password
这样的列时。PostgreSQL可能将其视为一个保留关键字。所以MyBatis SQL会这样:
INSERT INTO apple_server_notification_record (created_time, updated_time, notification_type, auto_renew_product_id, auto_renew_status, auto_renew_status_change_date, auto_renew_status_change_date_ms, auto_renew_status_change_date_pst, environment, `password`, bid, bvrs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
它将在SQL中自动添加"。但是在PostgreSQL 13中执行sql时。显示此错误:
org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "`"
Position: 249
### The error may exist in class path resource [mybatis/mapper/dolphin/AppleServerNotificationRecordMapper.xml]
### The error may involve com.dolphin.soa.post.dao.AppleServerNotificationRecordMapper.insertSelective-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO apple_server_notification_record (created_time, updated_time, notification_type, auto_renew_product_id, auto_renew_status, auto_renew_status_change_date, auto_renew_status_change_date_ms, auto_renew_status_change_date_pst, environment, `password`, bid, bvrs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "`"
Position: 249
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near "`"
Position: 249
我可以通过将列password
更改为apple_auth_password
来解决这个问题,我知道它会解决这个问题。但在我的代码中,我必须在接收来自苹果的请求时明确地转换映射。我的实体定义如下:
private String password;
有什么好的建议可以解决这个问题吗?当遇到这个问题时,你会怎么做?
您可以更改Mybatis生成器的自动生成器配置代码配置:
<property name="autoDelimitKeywords" value="true"/>
<!--
the beginningDelimiter and endingDelimiter using " by default
when using PostgreSQL using "
when using MySQL, we should change to `
-->
<property name="beginningDelimiter" value="""/>
<property name="endingDelimiter" value="""/>