繁体   English   中英

如何在 MyBatis 中获取从 Oracle 触发器创建的 ID - Spring Boot

[英]How to get ID created from Oracle trigger in MyBatis - Spring Boot

我见过几个类似的问题,但是,我无法在我的代码中获得正确的 ID 值。 它总是在插入后返回 1 作为 ID。

ItemController.java

@Operation(description = "Insert Test")
    @PostMapping("/item/add")
    @ResponseBody
    void upsertTest(
            @RequestBody itemForm testForm
    ) {
        Long itemId = itemService.getItemId();
        itemForm.setItemId(itemId);
        
        System.out.println("Item ID: " + itemId );
}

项目服务.java

@Service("ItemService")
public class ItemService {

    private final ItemDao itemDao;

    @Autowired
    public ItemService(@Qualifier("itemDao") final ItemDao itemDao) {
        this.itemDao = itemDao;
    }

    public Long getItemId(){
        return itemDao.getItemId();
    }
}

ItemDao.java

@Component("itemDao")
@Repository
public interface ItemDao {
    Long getItemId();
}

ItemDao.xml

<insert id="getItemId" useGeneratedKeys="true" keyProperty="itemId" keyColumn="ITEM_ID">
    INSERT INTO ITEM_ID_TABLE (DUMMY) VALUES (null)
</insert>

我的表基本上是 2 列(ITEM_ID、DUMMY),并且有一个触发器使用 ITEM_ID 列上的序列插入 ID。

每当我插入 output 时:

Item ID: 1

即使我已经完成了多次插入

在 ItemDao.xml 尝试这样的事情:

<insert id="getItemId" useGeneratedKeys="true" keyProperty="itemId" keyColumn="ITEM_ID">
    INSERT INTO ITEM_ID_TABLE (DUMMY) VALUES (null)
       <selectKey keyProperty="returnId" resultType="int" order="AFTER">
        SELECT LAST_INSERT_ID();
       </selectKey>
</insert>

基于这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM