当主键不是id时,而是其他字段,那么该字段要加上@Id注解(除了表中指定主键,实体类中也要用@Id指定主键)

实体类如下:

@Data
@Table(name = "t_sys_role")
@Accessors(chain = true)
public class Role extends BaseEntity implements Serializable {
    private static final long serialVersionUID = -13963720540937036L;
    /**
    * 角色编号
    */
    @Id
    @Column(name = "role_no")
    private String roleNo;
    /**
    * 角色名称
    */
    @Column(name = "role_name")
    private String roleName;
    /**
    * 角色描述
    */
    @Column(name = "role_desc")
    private String roleDesc;

}

现在roleNo为主键,如果实体类中不给roleNo加上@Id注解,那么下面的代码会执行失败,因为虽然数据库表中已经指定了role_no为主键,但是在实体类中如果不指定主键,java代码就找不到主键,故无法根据主键修改。

@Override
    public int updateInfo(Role role) {
        User user = SessionCache.get();
        role.setUpdateTime(new Date()).setUpdateUser(user.getUsername());
        return roleDao.updateByPrimaryKeySelective(role);
    }
原文地址:https://www.cnblogs.com/zwh0910/p/15670370.html