关于#java#的问题,如何解决?

java: com.student.studentmanagementsystem.entity.Member中的getId()无法覆盖com.student.studentmanagementsystem.config.BaseEntity中的getId()返回类型java.lang.Long与java.lang.String不兼容

我现在遇到一个问题,因为后端是用mp自动生成的id所以长度有19位,但是js的精度只有16位,但是我数据库里的字段类型是bigint,所以我写了一个类
BaseEntity.java

@Data
public class BaseEntity implements Serializable {

    private String id;

    private String gid;

    private String sid;

    private String subjectId;

}

然后我每个实体类都继承了它

@Data
@TableName("grade")
public class Grade extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @TableField("id")
    private Long id;

    @TableField("grade_name")
    private String gradeName;

    @TableField("create_time")
    private Timestamp createTime;

    @TableField("update_time")
    private Timestamp updateTime;

}

我感觉这应该没有问题,结果还是报无法转换类型,所以有没有会的给我提提建议,谢谢了!

在 Grade 类中,你声明了一个名为 id 的字段,类型为 Long。这个字段和你从 BaseEntity 继承过来的 id 字段同名,但是类型不同。

Java 的继承机制要求,子类中的方法必须与父类中的方法具有相同的名称和参数类型,返回类型可以不同。但是你在 Grade 类中声明了一个 id 字段,它和从 BaseEntity 继承过来的 id 字段类型不同,这就导致了冲突。

为了解决这个问题,可以考虑在 Grade 类中更改 id 字段的名称,或者在 BaseEntity 中将 id 字段的类型更改为 Long。
望采纳。

  1. 不继承BaseEntity
  2. 去掉Grade的id字段
  3. 如果其他的类的id都是数值类型,可以将BaseEntity的id类型改为Long

你这是什么问题?后端给前端数据都是转json的,前端接收到的数据都是字符串,不存在什么精度问题

不是特别明白为什么要这么设计,数据库里面的id是bigint为什么BaseEntity里面的id要定义成String, 而且实现类中又要重新定义Long类型的id,而且你想直接把数据库查询对象(DO/Entity)直接返回给前端你确定领导不会骂你?老老实实中间做一层对象转换吧