gpt4 book ai didi

java - 使用 Spring Command Line Runner 初始化数据

转载 作者:行者123 更新时间:2023-12-01 13:45:37 24 4
gpt4 key购买 nike

在这里,我想在服务器启动时将一些东西硬编码到数据库中,Spring 命令行运行程序

问题:- 在此我已经检查过,如果 1L 不存在,则使用 Id 1L 进行输入,但当 1L 或 2L 或 3L 不存在时,它仍然存储到增量 Id。

我在其中进行输入的实体:-

产品类别

@Data
@Entity
@Table(name = "tbl_product_type_chemical")
public class ProductType implements IBaseData<Long> {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
private Long id;
private String name;
@Column(columnDefinition = "text")
private String description;
}

这是 Runner 的方法:-
private void loadProductTypeNew() throws Exception {
String SUBMODULE = " [Init Data] " + " [loadProductTypeNew()] ";
try {
ProductType fp = productTypeRepository.getOne(1L);
if (null == fp) {
fp = new ProductType();
fp.setId(1L);
fp.setName("FINISH PRODUCT");
productTypeRepository.save(fp);
}
ProductType rm = productTypeRepository.getOne(2L);
if (null != rm) {
rm = new ProductType();
rm.setId(2L);
rm.setName("RAW MATERIAL");
productTypeRepository.save(rm);
}
ProductType sm = productTypeRepository.getOne(3L);
if (null != sm) {
sm = new ProductType();
sm.setId(3L);
sm.setName("SUPPORTING MATERIAL");
productTypeRepository.save(sm);
}
} catch (Exception ex) {
ApplicationLogger.logger.error(SUBMODULE + ex.getMessage(), ex);
throw ex;
}
}


@Override
public void run(String... args) throws Exception {
loadProductTypeNew();`
}

输出:-
9           SUPPORTING MATERIAL
8 RAW MATERIAL
7 FINISH PRODUCT
10 FINISH PRODUCT
11 RAW MATERIAL
12 SUPPORTING MATERIAL
13 RAW MATERIAL
14 SUPPORTING MATERIAL

我在运行方法中调用它。如果有人能解决提前谢谢

最佳答案

您的应用程序中的任何内容都不应依赖于 id 字段的特定值,因为它是由数据库生成的。

因此,我建议确定一个业务键(在您的情况下是名称),确保它与主键是唯一的,并使用它来确定是否需要在数据库中插入一行。

您的代码看起来与此类似

if (productTypeRepository.existsByName(""FINISH PRODUCT")) {
ProductType fp = new ProductType();
fp.setName("FINISH PRODUCT");
productTypeRepository.save(fp);
}

关于java - 使用 Spring Command Line Runner 初始化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61995968/

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