Java Spring数据保存不更新持久性上下文中的PK?

Java Spring数据保存不更新持久性上下文中的PK?,java,spring,hibernate,spring-data,crud,Java,Spring,Hibernate,Spring Data,Crud,每次我使用JPA Spring数据存储库的save方法时,它都会返回一个新对象,并且自动生成的PK不会在保存的对象中更新 我是否必须手动使用save方法返回的更新本地对象PK 代码: savedProject与projectModel.getProject不同 因此,用户PK在Mysql中被定义,每次我保存项目时,都会创建一个新用户,因为应用程序中的用户仍然没有PK…每次你保存一个新项目时,JPA都会在数据库中创建一个新对象 为了更新一个实体,您需要首先将该实体从数据库中获取到JPA上下文中,如

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

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

代码:

savedProject与projectModel.getProject不同

因此,用户PK在Mysql中被定义,每次我保存项目时,都会创建一个新用户,因为应用程序中的用户仍然没有PK…

每次你保存一个新项目时,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.

密码。我没有看到它这样做。如果DB自动生成PK,我必须使用savedProject重新加载本地对象,以便下次能够更新,而不是再次创建新对象。这仍然不足以重现您的问题。当您使用JPA时,Repository save方法将返回一个新对象,并且应该填充您没有显示项目的@Id。然而,这看起来像是有外键关系在进行,这可能会使事情复杂化。展示你的课程。完美的解决方案。。。只添加了几行代码,用上一个项目的PKs更新本地项目。。。
@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;
}
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.