gpt4 book ai didi

java - 如何使用 Spring data jdbc 插入带有自定义 id 的记录?

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:24 24 4
gpt4 key购买 nike

对于 Spring Data JPA,我可以使用 @GeneratedValue(strategy = GenerationType.AUTO) 插入带有自定义 id 的记录,但是对于 Spring Data JDBC,我如何插入带有自定义 id 的记录ID?我尝试用 id 插入,但没有抛出异常,记录没有插入到表中。

最佳答案

使用 Spring Data JDBC 的方法是注册一个 BeforeSaveEvent ApplicationListener 来创建 id 并将其设置在实体中。

@Bean
public ApplicationListener<BeforeSaveEvent> idSetting() {

return event -> {

if (event.getEntity() instanceof LegoSet) {

LegoSet legoSet = (LegoSet) event.getEntity();
if (legoSet.getId() == null) {
legoSet.setId(createNewId());
}
}
};
}

Spring Data Examples 中有一个例子表明

您的行未插入到表中但您也没有得到异常的原因是:Spring Data JDBC 断定该实体在设置 ID 后已经存在并执行了更新。但由于它不存在,更新无法更新任何行,所以什么也没有发生。可能值得创建一个改进请求来检查更新计数是否为 0。

更新

自版本 1.1 JdbcAggregateTemplate.insert可用,允许您在不检查聚合是否为新的情况下进行插入。如果需要,您可以使用它在您的存储库中创建自定义方法,或者您可以在需要的任何地方 Autowiring 模板并直接使用它。

对于 DATAJDBC-438,如果保存聚合,Spring Data JDBC 也会抛出异常,导致更新,但更新更新零行,因此此类问题不会被忽视。

关于java - 如何使用 Spring data jdbc 插入带有自定义 id 的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com