如何解决Mybatis 手动插入PK
我正在尝试使用指定的 PK 将数据单独插入到表中。手动分配PK。
XML 文件
<insert id = "insertStd" parameterType = "com.org.springboot.dao.StudentEntity" useGeneratedKeys = "false" keyProperty = "insertStd.id",keyColumn = "id">
INSERT INTO STUDENT (ID,NAME,BRANCH,PERCENTAGE,PHONE,EMAIL )
VALUES (ID=#{insertStd.id},NAME=#{insertStd.name},BRANCH=#{insertStd.branch},PERCENTAGE=#{insertStd.percentage},PHONE=#{insertStd.phone},EMAIL =#{insertStd.email});
</insert>
服务调用方式
public boolean saveStudent(Student student){
LOGGER.info("Student object save");
int savedId= studentMapper.insertStd(student);
}
日志文件
org.springframework.jdbc.badsqlgrammarexception
### Error updating database Causes: cause org.postgresql.util.psqlexception error column id does not exist
HINT: There is a column named "id" in the table "student" but it can't be referenced from this part of the query.
Position 200
### Error may exist in file [c:\.....\StudentMapper.xml]
### Error may involve in com.org.springboot.dao.StudentMapper.insertStd-InLine
### The error occurred while setting parameters
### sql INSERT INTO STUDENT (ID,EMAIL )
VALUES (ID=?,NAME=?,BRANCH=?,PERCENTAGE=?,PHONE=?,EMAIL=?);
### cause org.postgresql.util.psqlexception ERROR column "id" doesn't exist. //It did worked with JPA id assigned manually.
### There is a column named "ID" in the table "STUDENT",Bbut it cannot be referenced from the part of the query.
解决方法
格式错误的 INSERT
语句。 VALUES
子句不应包含列名。
此外,由于没有主要的自动生成,您可以删除所有其他属性。只需离开映射器 id
。
注意:如果要手动分配PK值,需要确保表中没有列的GENERATED ALWAYS
子句。如果是这种情况,表格将忽略您提供的值,并使用自己的规则生成 PK。
使用:
<insert id="insertStd">
INSERT INTO STUDENT (ID,NAME,BRANCH,PERCENTAGE,PHONE,EMAIL)
VALUES (
#{insertStd.id},#{insertStd.name},#{insertStd.branch},#{insertStd.percentage},#{insertStd.phone},#{insertStd.email}
);
</insert>
您的错误很容易重现:
create table t (a int,b varchar(10));
insert into t (a,b) values (123,'ABC'); -- succeeds
insert into t (a,b) values (a=123,b='ABC'); -- fails!
错误:“a”列不存在
参见Fiddle。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。