Mybatis 手动插入PK

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?