mybatis-flex icon indicating copy to clipboard operation
mybatis-flex copied to clipboard

使用saveOrUpdate产生的sql一直是update

Open MutionHu opened this issue 1 year ago • 2 comments

版本:1.8.8

实体类主键使用自增:


@Data
@Table(value = "sys_test")
public class SysTestEntity {

    @Id(keyType = KeyType.Auto)
    private Long id;

    @Column(value = "NAME")
    private String name;


}

实体类主键使用None:

@Data
@Table(value = "sys_test_2")
public class SysTest2Entity {

    @Id(keyType = KeyType.None)
    private String id;

    @Column(value = "NAME")
    private String name;


}

测试:

@Test
    void saveOrUpdate() {
        SysTestEntity testEntity = new SysTestEntity();
        //testEntity.setId(1L);
        testEntity.setName("test aaa");
        sysTestService.saveOrUpdate(testEntity);

        SysTest2Entity test2Entity = new SysTest2Entity();
        test2Entity.setId("aaa");
        test2Entity.setName("aaa test");
        sysTest2Service.saveOrUpdate(test2Entity);
    }

控制台打印的SQL: INSERT INTO sys_test(NAME) VALUES ('test aaa')

UPDATE sys_test_2SETNAME= 'aaa test' WHEREid= 'aaa'

MutionHu avatar Apr 28 '24 08:04 MutionHu

自增主键也有问题,当设置ID为一个不存在的值时,SQL还是执行的UPDATE语句

        SysTestEntity testEntity = new SysTestEntity();
        testEntity.setId(2L);
        testEntity.setName("test aaa");
        sysTestService.saveOrUpdate(testEntity);

MutionHu avatar Apr 29 '24 02:04 MutionHu

底层逻辑是设置了主键就是更新,未设置主键就是insert

soulbug avatar May 14 '24 14:05 soulbug