【发布时间】:2020-03-22 18:11:37
【问题描述】:
我正在尝试更新数据,据我所知,如果 id 为 null,save() 方法会保存实体,如果在 DB 中找到给定的 id,则更新数据库中的现有实体。
但是,当我尝试保存数据时,它没有更新:
public Employer update() {
Employer emp = Employer.builder()
.id(2L) // it exists in database
.name('new company name')
.build();
return repository.save(emp);
}
但是,当我从数据库中检索数据并更新其字段并再次保存时,它会更新:
public Employer update() {
Employer emp = repository.getOne(2L);
emp.setName('new company name');
return repository.save(emp);
}
谁能解释这种行为的原因?我阅读了文档,但找不到与此相关的任何内容。
这是我的存储库:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface Employer extends JpaRepository<Employer, Long> {
}
和实体:
@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(schema = "public", name = "employer")
public class Employer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank
@Size(max = 50)
private String name;
}
【问题讨论】:
-
可以添加
Employer的代码来查看JPA注解吗? -
@WimDeblauwe 我添加了 Employer 实体
-
你如何测试这个?通过单元/集成测试还是在应用程序中?你在使用交易吗?
-
我在一个应用程序中测试,每2分钟调用一次服务方法,我每次都检查数据库。在第一种情况下,我构建实体并保存它不起作用,但在后一种情况下,当我从数据库中检索数据并更新其字段并再次保存时,它会更新。
-
在
update()方法上尝试@Transactional注释。希望这可能会奏效..
标签: java spring-boot jpa spring-data-jpa