gpt4 book ai didi

java - Spring数据保存不更新持久化上下文中的PK?

转载 作者:行者123 更新时间:2023-12-02 12:06:08 26 4
gpt4 key购买 nike

每次我使用 JPA Spring 数据存储库的方法 save 时,它​​都会返回一个新对象,并且自动生成的 PK 不会在保存的对象中更新。

我是否必须使用 save 方法返回的值手动更新本地对象 PK?

代码:

private void saveProject(){
Project savedProject = projectRepository.save(projectModel.getProject());
}

savedProjectprojectModel.getProject

不同
@Entity
@Table(name = "project", schema = "public")
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
List<User> users;
[...]
}

还有:

@Entity
@Table(name = "user", schema = "public")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;

String name;
}

因此,用户 PK 是在 Mysql 中生成的,每次我保存项目时都会创建一个新用户,因为应用程序中的用户仍然是 PKless...

最佳答案

每次保存new Project()时,JPA都会在数据库中创建一个新对象。

要更新实体,您需要首先像这样从数据库中获取该实体,将该实体引入 JPA 上下文中。

Project lastProject = projectRepository.findById(PROJECT_ID); //lastProject is now updatable.
lastProject.setName(...); //update the entity fields
lastProject = projectRepository.save(lastProject); //project will now have the updated name.

关于java - Spring数据保存不更新持久化上下文中的PK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898239/

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