下面是在 PostgreSQL 数据库中成功创建表的 create table 语句。
CREATE TABLE
SYNC_REPOSITORIES (
REPOSITORY_ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
REPOSITORY_NAME VARCHAR(256) NOT NULL,
REPOSITORY_KIND VARCHAR(256) NOT NULL,
LOGIN_NAME VARCHAR(256),
LOGIN_INFO VARCHAR(2000),
CONSTRAINT REPO_NAME_U UNIQUE (REPOSITORY_NAME));
Mybatis mapper.xml 用于插入
<insert id="insertRepository" parameterType="RepositoryDO" useGeneratedKeys="true" keyProperty="id" keyColumn="REPOSITORY_ID">
INSERT INTO SYNC_REPOSITORIES (
REPOSITORY_NAME,
REPOSITORY_KIND,
LOGIN_NAME,
LOGIN_INFO)
VALUES (
#{name},
#{kind},
#{loginName,jdbcType=VARCHAR},
#{loginInfo,jdbcType=VARCHAR})
</insert>
由于 REPOSITORY_ID 是自动生成的值,我没有在插入语句中添加它。当这是通过 sqlSessionFactory 执行时,它返回一个错误说
设置参数时出错
SQL: INSERT INTO SYNC_REPOSITORIES ( REPOSITORY_NAME, REPOSITORY_KIND, LOGIN_NAME, LOGIN_INFO) VALUES ( ?, ?, ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: column "REPOSITORY_ID" does not exist
Position: 194
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: column "REPOSITORY_ID" does not exist
Position: 194
相同的映射器 xml 适用于 MSSQL 和 ORACLE 数据库。我是 PostgreSQL 新手。