gpt4 book ai didi

java - 如何创建具有 @GeneratedValue 的实体的实例以插入模拟数据而不更新现有行?

转载 作者:行者123 更新时间:2023-12-04 07:31:40 25 4
gpt4 key购买 nike

这是我的实体:


@Entity
@Table
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
public class Sample {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

private String name;

private boolean whatever;

}

我想将模拟数据插入数据库:
@SpringBootApplication
public class MyApplication {

public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(MyApplication.class, args);
Service service = context.getBean(Service.class);


service.save(new Sample("name", true); //Doesnt compile, lacks id
service.save(new Sample(10, "name", true); //If row with id 10 exists, it gets updated
}

}


正如评论中所解释的,它要么不编译,要么替换行。
通过 Controller 添加数据时,我可以将 json 上的 id 保留为未定义,它会生成一个新的。 Controller 如何实现这一点?
编辑:
服务通过调用JpaRepository的save方法来保存对象
public Sample save(Sample s) {
return repository.save(s);
}

最佳答案

您的问题是您的 pojo Sample 没有没有 id 的构造函数。您已经使用了注释 @NoArgsConstructor 和 @AllArgsConstructor,它们分别为您提供了一个空的构造函数和一个包含所有字段的构造函数。在 Controller 中它的工作原理是由于 Controller 上存在序列化和反序列化(Spring 默认为 jackson ),它能够使用空构造函数和直接访问字段来构建缺少字段的对象。
您所要做的就是使用您在 pojo 示例上需要的字段创建一个构造函数,因此在所描述的情况下,将类似于:

public Sample(String name, boolean whatever) {
this.name = name;
this.whatever = whatever;
}
这将适合您的问题。

关于java - 如何创建具有 @GeneratedValue 的实体的实例以插入模拟数据而不更新现有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67903267/

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