开发者

mybatisplus+pgsql查询bug的解决

开发者 https://www.devze.com 2023-03-18 10:17 出处:网络 作者: huarui0922
最近公司把底层数据库,改换成了pgsql,之前一直是用的mysql。可是换了pgsql之后,现在发现跟myBATisplus集成上,居然出现了一些很奇怪的bug。

最近公司把底层数据库,改换成了pgsql,之前一直是用的mysql。可是换了pgsql之后,现在发现跟myBATisplus集成上,居然出现了一些很奇怪的bug。

这是sys_user表,我要根据id查这两条数据,一个id为3,一个id为5

mybatisplus+pgsql查询bug的解决

这是4条查询www.devze.com语句,前2条根据id为3的查,后两条根据id为5的查

mybatisplus+pgsql查询bug的解决

以下是根据id为3来查,

mybatisplus+pgsql查询bug的解决

mybatisplus+pgsql查询bug的解决

数据正常查了处理,departmentId也不为空,为啥这里我要提到 departmentId这段,请接着看,

奇怪的事情发生了,当id为5的查询时,数据也查出来了,确实是数据库里的那两条数据,但是

departmentId居然为null,这就很离谱

mybatisplus+pgsql查询bug的解决

mybatisplus+pgsql查询bug的解决

这是实体:

package com.xmirror.entity.entity.system;
 
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterXML.jackson.annotation.jsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.xmirror.entity.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
 
import Java.beans.Transient;
import java.util.*;
 
/**
 * 用户实体
 *
 * @author Wang, Haoyue
 * @since 2020/9/11 2:04 下午
 */
@Data
@TableName("sys_user")
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User extends BaseEntity implements UserDetails {
 
    /**
     * 用户名
     */
    private String username;
 
    /**
     * 密码
     */
    private String password;
 
    /**
     * 真实姓名
     */
    private String realName;
 
    /**
     * 手机号码
     */
    private String phone;
 
    /**
     * 邮箱
     */
    private String email;
 
    /**
     * 是否启用
     * 0: 不启用
     * 1: 启用
     */
    private Integer status;
 
    /**
     * 部门id
     */
    private Integer departmentId;
 
    /**
     * 授权开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date authStartTime;
 
    /*编程客栈*
     * 授权结束时间
  http://www.devze.com   */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date authEndTime;
 
    /**
     * 登录失败次数
     */
    private Integer loginFailCount;
 
    /**
     * 角色id开发者_JAVA学习
     */
    @TableField(exist = false)
    private Integer roleId;
 
    /**
     * 角色名称
     */
    @TableField(exist = false)
    private String roleName;
 
    /**
     * 注册说明
     */
    private String remark;
 
    /**
     * 权限集合
     * 非数据库字段属性
     */
    @TableField(exist = false)
    private List<Permission> authorities;
 
    public User() {
    }
 
    public User(Integer id){
        super.setId(id);
    }
    public User(List<Permission> authorities, User user) {
        this.authorities = authorities;
        super.setId(user.getId());
        super.setModifyDate(user.getModifyDate());
        super.setCreateDate(user.getCreateDate());
        username = user.getUsername();
        password = user.getPassword();
        realName = user.getRealName();http://www.devze.com
        phone = user.getPhone();
        email = user.getEmail();
        status = user.getStatus();
        departmentId = user.getDepartmentId();
        authStartTime = user.getAuthStartTime();
        authEndTime = user.getAuthEndTime();
    }
 
    @Transient
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<SimpleGrantedAuthority> auth = new ArrayList<>();
        // 根据Permission生成权限列表
        Optional.ofNullable(authorities)
          javascript      .ifPresent(p -> p.forEach(permission -> {
                    auth.add(new SimpleGrantedAuthority(permission.getExpression()));
                }));
        return auth;
    }
 
    @Transient
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
 
    @Transient
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
 
    @Transient
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
 
    @Transient
    @Override
    public boolean isEnabled() {
        return true;
    }
}

这是表结构

mybatisplus+pgsql查询bug的解决

我把sql打印出来,拿来数据库里执行,都是能正常查出来的,说明单独跟pgsql没有关系,估计就是pgsql跟mybatisplus集成上的问题。而且也只有这一个字段出不来,并且也不是每条数据的这个字段出不来。

真是百思不得其解,都后悔用这pgsql这玩意儿了,不知道有朋友遇到过这种奇怪问题没有

到此这篇关于mybatisplus+pgsql查询bug的解决的文章就介绍到这了,更多相关mybatisplus pgsql查询bug内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号