如何更新与 Spring-JPA 中的主键关联的值

How to update values associated with Primary Key in Spring-JPA

我想使用 Spring-JPA 更新与主键关联的记录。

GroupChatHeartBeat groupChatHeartBeat=new GroupChatHeartBeat();
            groupChatHeartBeat.setId(user.getId());
            groupChatHeartBeat.setGender(user.getGender());
            groupChatHeartBeat.setHeartBeatTime(new Date());
            groupChatHeartBeat.setUrl(userPhoto.getSrcBig());
groupChatHeartBeatRepository.save(groupChatHeartBeat);

其中 GroupChatHeartBeat 被声明为实体,但这样做并没有替换为新值。它仅显示旧值。我的目的是更新 table,如果存在 id,则应将其替换为新记录(如时间、性别、url 等)。这是实体

@Entity
@Table
public class GroupChatHeartBeat implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private Long id;

    private Date heartBeatTime;

    private String url;

    private Gender gender;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Date getHeartBeatTime() {
        return heartBeatTime;
    }

    public void setHeartBeatTime(Date heartBeatTime) {
        this.heartBeatTime = heartBeatTime;
    }

    public Gender getGender() {
        return gender;
    }

    public void setGender(Gender gender) {
        this.gender = gender;
    }

}

试试这个:

要更新数据库中的现有实体 - 您必须将新对象的对象 ID 设置为旧对象 ID。

newObject.setId(OldObject.getId()) 然后 repo.save(newObject) 将更新数据库中的现有实体。

实体Class

@Entity
public class GroupChatHeartBeat {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Date heartBeatTime;

    private String url;

    public GroupChatHeartBeat() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getHeartBeatTime() {
        return heartBeatTime;
    }

    public void setHeartBeatTime(Date heartBeatTime) {
        this.heartBeatTime = heartBeatTime;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public GroupChatHeartBeat(Date heartBeatTime, String url) {
        this.heartBeatTime = heartBeatTime;
        this.url = url;
    }

    @Override
    public String toString() {
        return "GroupChatHeartBeat{" +
                "id=" + id +
                ", heartBeatTime=" + heartBeatTime +
                ", url='" + url + '\'' +
                '}';
    }
}

Autowire 存储库

@Autowired
private GroupChatHeartBeatRepository groupChatHeartBeatRepository;

保存并更新

// Save New
GroupChatHeartBeat grp = new GroupChatHeartBeat(new Date(), "http://www.google.com");
groupChatHeartBeatRepository.save(grp);

groupChatHeartBeatRepository.findAll().forEach(System.out::println);

// Update same object and save-> updates value of existing in database
grp.setUrl("http://spring.io");
groupChatHeartBeatRepository.save(grp);

groupChatHeartBeatRepository.findAll().forEach(System.out::println);

// Create New object, set Id of new object as old object and save-> updates value of existing in database
GroupChatHeartBeat grpUpdated = new GroupChatHeartBeat(new Date(638893800000L), "https://github.com/RawSanj");
grpUpdated.setId(grp.getId());
groupChatHeartBeatRepository.save(grpUpdated);

groupChatHeartBeatRepository.findAll().forEach(System.out::println);

检查我的 GitHub 存储库中的 Complete Project