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

和自甴很熟 提交于 2019-12-11 06:55:15

问题


I want to update a record associated with a primary key using 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);

where GroupChatHeartBeat is declared as Entity, but doing so it's not replacing with new value. it is showing old value only. My intention is to update the table and if an id exist it should get replaced with new records(like time, gender, url etc ). here is the entity

@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;
    }

}

回答1:


Try this :

To update an existing entity in database - You must set the Object Id of new Object to OldObject Id.

i.e. newObject.setId(OldObject.getId()) and then repo.save(newObject) will update the existing entity in the database.

Entity 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 Repository

@Autowired
private GroupChatHeartBeatRepository groupChatHeartBeatRepository;

Save and Update

// 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);

Checkout the Complete Project in my GitHub repository.



来源:https://stackoverflow.com/questions/39410341/how-to-update-values-associated-with-primary-key-in-spring-jpa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!