Java +postgresql 无法映射父类实体 - V2EX
esbug

Java +postgresql 无法映射父类实体

  •  
  •   esbug Jun 1, 2022 2979 views
    This topic created in 1441 days ago, the information mentioned may be changed or developed.

    这是我的 BaseEntity

    package com.txys.system.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.extension.activerecord.Model; import lombok.Data; @Data public abstract class BaseEntity<T> extends Model<BaseEntity<T>> { @TableField(value = "createdBy") private String createdBy; @TableField(value = "createdAt") private String createdAt; @TableField(value = "updatedAt") private String updatedAt; @TableField(value = "updatedBy") private String updatedBy; @TableField(value = "deletedAt") private String deletedAt; } 

    这是我的 SystemUser 表

    package com.txys.system.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; @TableName("\"SystemUser\"") @Data public class SystemUser extends BaseEntity<SystemUser> implements Serializable { @TablId(value = "id", type = IdType.AUTO) private Integer id; @TableField(value = "username") private String username; @TableField(value = "password") private String password; } 

    ###1 、我现在的问题是:继承了 BaseEntity 父类,调用 selectById ,

    SELECT id,username,password,createdBy,createdAt,updatedAt,updatedBy,deletedAt FROM "SystemUser" WHERE id=? 

    查询时会自动加上父类继承的字段,如果父类字段加上 exsit=false ,那么查询就也不会带上父类字段,但以前使用 MySQL 的时候是可以被识别的。

    查询结果映射的时候,会报错:

    Error querying database. Cause: org.postgresql.util.PSQLException: 错误: 字段 "createdby" 不存在

    也就是说:映射找不到继承的父类公共字段

    问过 mybatis-plus 官方,他们说是 postgresql 驱动那边的异常,但没具体告诉我该怎么去排查解决,网上也没搜到这种类似的问题。

    12 replies    2022-06-02 14:13:28 +08:00
    Oktfolio
        1
    Oktfolio  
       Jun 1, 2022
    如果 driver 是最新版尝试降 org.postgresql:postgresql 版本,如果不是,尝试升级最新版
    Oktfolio
        2
    Oktfolio  
       Jun 1, 2022
    更换版本不能解决的话,不是 sqlparser 的问题,就是 mybatis-plus 的问题
    y830CAa5nink4rUQ
        3
    y830CAa5nink4rUQ  
       Jun 1, 2022
    你的表确认存在这个字段吗?
    micean
        4
    micean  
       Jun 1, 2022
    是不是大小写的问题?
    CaspianJou
        5
    CaspianJou  
       Jun 1, 2022
    这代码看着真难受,类名属性名一样或者驼峰能对应的话注解可以省略的
    aircjm
        6
    aircjm  
       Jun 1, 2022
    xml 写法救命啊
    ccccccccw
        7
    ccccccccw &nsp;
       Jun 1, 2022
    createdby 还是 createdbBy ,postgresql 貌似默认忽略大小写,如果强制要 createdBy 的话,要加上'createdBy'
    ccccccccw
        8
    ccccccccw  
       Jun 1, 2022
    @ccccccccw 记错了,好想是"createdBy"
    esbug
        9
    esbug  
    OP
       Jun 1, 2022
    问题是解决了。方法就是在 BaseEntity ,对字符串转义。
    ```java
    @Data
    public abstract class BaseEntity<T> extends Model<BaseEntity<T>> {

    @TableField(value = "\"createdBy\"")
    private String createdBy;

    @TableField(value = "\"createdAt\"")
    private String createdAt;

    @TableField(value = "\"updatedAt\"")
    private String updatedAt;

    @TableField(value = "\"updatedBy\"")
    private String updatedBy;

    @TableField(value = "\"deletedAt\"")
    private String deletedAt;
    }

    ```
    <a href="https://imgtu.com/i/XJq6Z4"><img src="https://s1.ax1x.com/2022/06/01/XJq6Z4.png" alt="XJq6Z4.png" border="0" /></a>
    OldCarMan
        10
    OldCarMan  
       Jun 2, 2022
    话说你们表和字段命名也是驼峰式的吗?还是迫于历史遗留必须统一风格的无奈?或是我孤陋寡闻,见识太少了。生产环境中我还没见过有人这么命名的,基本都是小写字母构成的单词、“_”和数字这三种组合而成的命名风格。
    xinJang
        11
    xinJang  
       Jun 2, 2022
    插个楼。怎么直接映射 pg 数据库里的 json 格式。
    pom 里面引入了 hibernate-types-52
    entity 里面也配置了
    类注解 @TypeDef(name = "json", typeClass = JsonBinaryType.class)
    属性注解 @Type(type = "json")
    @Column(columnDefinition = "jsonb")
    xinJang
        12
    xinJang  
       Jun 2, 2022
    印象中是反序列化报错,是不是要替换 json 包才可以
    About     Help     Advertise     Blog     API     FAQ     Solana     2672 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 15:58 PVG 23:58 LAX 08:58 JFK 11:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86