问题描述
当我在 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,?)
### 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-generator的自动生成器配置代码配置:
<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="""/>