Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
guqiyao opened this issue Aug 3, 2017 · 15 comments
Closed

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

guqiyao opened this issue Aug 3, 2017 · 15 comments

Comments

@guqiyao
Copy link

guqiyao commented Aug 3, 2017

如下接口:
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>
@huayanYu
Copy link
Member

huayanYu commented Aug 3, 2017

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

@guqiyao
Copy link
Author

guqiyao commented Aug 3, 2017

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

@qmdx
Copy link
Member

qmdx commented Aug 3, 2017

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

@qmdx qmdx closed this as completed Aug 3, 2017
@guqiyao
Copy link
Author

guqiyao commented Aug 3, 2017

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

@qmdx
Copy link
Member

qmdx commented Aug 3, 2017

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

@guqiyao
Copy link
Author

guqiyao commented Aug 3, 2017

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

@yuxiaobin
Copy link
Contributor

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

@guqiyao
Copy link
Author

guqiyao commented Aug 10, 2017

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

@qmdx
Copy link
Member

qmdx commented Aug 10, 2017

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

@guqiyao
Copy link
Author

guqiyao commented Aug 10, 2017

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

@qmdx
Copy link
Member

qmdx commented Aug 10, 2017

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

@yuxiaobin
Copy link
Contributor

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

我针对的是你说的

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

@guqiyao
Copy link
Author

guqiyao commented Aug 10, 2017

@yuxiaobin 你是来搞笑的?

@yuxiaobin
Copy link
Contributor

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

@guqiyao
Copy link
Author

guqiyao commented Aug 10, 2017

@yuxiaobin 这个bug是你告诉我的,还是版本发布时说的?还是我回复里自己说的?你要不要吃点海鱼名目?

@baomidou baomidou locked and limited conversation to collaborators Aug 10, 2017
@baomidou baomidou unlocked this conversation Aug 10, 2017
@baomidou baomidou locked and limited conversation to collaborators Aug 10, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants