Skip to content

id相关的操作都会报Invalid bound statement这个异常 #126

Closed
@guqiyao

Description

@guqiyao

如下接口:
selectBatchIds
deleteById
deleteBatchIds
selectById

所有的Model都继承一个抽象模型类

public abstract class BaseModel {
    private Long id;

    @TableLogic
    private Byte isDeleted;
    private LocalDateTime createdTime;
    private LocalDateTime updatedTime;
    private LocalDateTime deletedTime;

    private Long creatorId;
    private Long updatedById;
    private Long deletedById;
}

这是spring整合的配置文件片段

   <bean id="logicSqlInjector" class="com.baomidou.mybatisplus.mapper.LogicSqlInjector" />

    <!-- 定义 MP 全局策略 -->
    <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <property name="idType" value="0"/>
        <property name="dbType" value="mysql"/>

        <!-- 全局表为下划线命名设置 true -->
        <property name="dbColumnUnderline" value="true"/>

        <property name="sqlInjector" ref="logicSqlInjector" />
        <property name="logicDeleteValue" value="1" />
        <property name="logicNotDeleteValue" value="0" />
    </bean>


    <!-- spring和MyBatis -->
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
        <property name="configLocation" value="classpath:mybatis/mybatis-context.xml" />
        <property name="plugins">
            <array>
                <bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" >
                    <property name="dialectClazz" value="mysql" />
                </bean>
            </array>
        </property>

        <!-- MP 全局配置注入 -->
        <property name="globalConfig" ref="globalConfig"/>
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.mo9.mule.dao.mapper" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

Activity

huayanYu

huayanYu commented on Aug 3, 2017

@huayanYu
Member

检查ID相关配置,详细阅读文档.
不行请贴实体代码和配置.

guqiyao

guqiyao commented on Aug 3, 2017

@guqiyao
Author

已经尝试出来了,如果id字段继承自父类,则会出现此异常
若直接在实体类中定义id,不是继承而来的,则不会出现Invalid bound statement异常
@huayanYu

qmdx

qmdx commented on Aug 3, 2017

@qmdx
Member

@guqiyao 不可能不能继承,我自己使用的时候就是继承 id 你肯定有别的错误

guqiyao

guqiyao commented on Aug 3, 2017

@guqiyao
Author

@qmdx 麻烦你看下我的配置,是哪里配错了吗?我是按照文档来配置的

qmdx

qmdx commented on Aug 3, 2017

@qmdx
Member

@guqiyao 目测你这个mp版本比较老,新版已经不在需要指定数据库类型,升级最新版本 2.1.0 试试。 原因仔细排查

guqiyao

guqiyao commented on Aug 3, 2017

@guqiyao
Author

@qmdx bug解决了,mp在初始化TableInfo 对象时,会判断model是否带有 主键, 在初始化的逻辑中,会将model的所有字段都取出并存储在集合中,而问题在于2.0.9版本中的逻辑是判断集合中第1个元素(即model的字段)是不是id,如果是则判断有主键,如果没,则判断这个实体没有主键,但是id这个字段并不一定排在集合的第1位,所以导致这个bug产生,2.1.0中的源码经过观察,应该是已经解决这个bug了,谢谢你的回答,其次希望你以后不要轻易的关闭问题,这个问题确实是2.0.9中的bug引起的

yuxiaobin

yuxiaobin commented on Aug 10, 2017

@yuxiaobin
Contributor

2.0.9又不能改了,不关闭留着干嘛?
新版本早已修复,当然要关闭

guqiyao

guqiyao commented on Aug 10, 2017

@guqiyao
Author

@yuxiaobin 你怕是连原委都没搞清楚就来评论了吧.

qmdx

qmdx commented on Aug 10, 2017

@qmdx
Member

@guqiyao 文档说的很清楚没有主键设置情况下不能使用 id 相关操作,有异议加入我们群

guqiyao

guqiyao commented on Aug 10, 2017

@guqiyao
Author

@qmdx 文档写的很清楚,没有 @TableId 注解也可以使用,但主键必须要叫 id,而且bug我已经发现了,并且这个bug在2.0.9之后已经修复

qmdx

qmdx commented on Aug 10, 2017

@qmdx
Member

@guqiyao 确实2.0.9 版本 id 如果在父类或者不是第一个的情况下使用存在问题,对没有主键加上主键也可以使用,但是会把注解字段当做 byId 的操作内容

yuxiaobin

yuxiaobin commented on Aug 10, 2017

@yuxiaobin
Contributor

你在用2.0.9版本报bug,都告诉你这就是09的bug(判断ID用了第一个元素),你换2.1.0就没这个问题了,那不关闭这个bug?
您佬继续用09?继续报bug?可笑

我针对的是你说的

“其次希望你以后不要轻易的关闭问题,这个问题确实是2.0.9中的bug引起的”

guqiyao

guqiyao commented on Aug 10, 2017

@guqiyao
Author

@yuxiaobin 你是来搞笑的?

yuxiaobin

yuxiaobin commented on Aug 10, 2017

@yuxiaobin
Contributor

我不跟你搞笑,只是厌恶你这种说话方式。都告诉你答案了,还想怎样?为了09这个bug挥刀自宫吗?you can you up

4 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @qmdx@guqiyao@yuxiaobin@huayanYu

        Issue actions

          id相关的操作都会报Invalid bound statement这个异常 · Issue #126 · baomidou/mybatis-plus