Java 如何创建具有@GeneratedValue的实体实例来插入模拟数据而不更新现有行?
这是我的实体:Java 如何创建具有@GeneratedValue的实体实例来插入模拟数据而不更新现有行?,java,spring-boot,Java,Spring Boot,这是我的实体: @实体 @桌子 @诺尔格构装师 @AllArgsConstructor @塞特 @吸气剂 公共类样本{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私有int-id; 私有字符串名称; 私有布尔值; } 我想将模拟数据插入数据库: @springboot应用程序 公共类MyApplication{ 公共静态void main(字符串[]args){ ApplicationContext上下文=SpringApplicati
@实体
@桌子
@诺尔格构装师
@AllArgsConstructor
@塞特
@吸气剂
公共类样本{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
私有字符串名称;
私有布尔值;
}
我想将模拟数据插入数据库:
@springboot应用程序
公共类MyApplication{
公共静态void main(字符串[]args){
ApplicationContext上下文=SpringApplication.run(MyApplication.class,args);
Service=context.getBean(Service.class);
save(新示例(“name”,true);//未编译,缺少id
save(新示例(10,“name”,true);//如果存在id为10的行,则会对其进行更新
}
}
正如注释中所解释的,它要么不编译,要么替换行
当通过控制器添加数据时,我可以不定义json上的id,它将生成一个新的id。控制器是如何实现这一点的
编辑:
服务通过调用JpaRepository的save方法来保存对象
public Sample save(Sample s) {
return repository.save(s);
}
您的问题是pojo示例没有没有id的构造函数。您使用了注释@NoArgsConstructor和@AllArgsConstructor,分别为您提供了一个空构造函数和一个包含所有字段的构造函数。在控制器中,由于控制器上存在序列化和反序列化,它可以工作(Spring上默认为Jackson)能够使用空构造函数和直接访问字段来构建缺少字段的对象 您所要做的就是创建一个构造函数,其中包含pojo示例中所需的字段,因此在所描述的情况下如下所示:
public Sample(String name, boolean whatever) {
this.name = name;
this.whatever = whatever;
}
这将解决您的问题。创建一个没有ID的构造函数服务如何保存对象?您能展示它的实现吗?我将用服务类更新答案,尽管@Jens comment有效。但不能接受作为答案的注释。