>

저장 방법을 사용하여 기존 객체를 업데이트하는 간단한 최대 절전 모드 프로젝트가 있습니다.

다음 코드는 저에게 효과적입니다.

sessionObj.beginTransaction();
MyObject myObj = sessionObj.get(MyObject.class, objID);
myObj.setPropertyA("new value");
sessionObj.save(myObj);
sessionObj.getTransaction().commit();

get () 메소드를 통해 ID가 objID 인 Object를 가져 와서 값을 변경하고 save () 메소드를 사용하여 영구적으로 표시하고 트랜잭션을 커밋합니다. 이 경우 Hibernate가 UPDATE 문을 생성하는 것을 관찰했습니다.

따라서 save () 메소드를 사용하여이 방법으로 업데이트를 할 수 있다면 차이점은 update () 메소드를 사용하여 업데이트하는 것입니다.

처럼

MyObject myObj = sessionObj.get(MyObject.class, objID);
myObj.setPropertyA("new value");
sessionObj.update(myObj);


  • 답변 # 1

    저장 (방법)

    와이즈 비즈

    The save method is an “original” Hibernate method that does not conform to the JPA specification.

    Its purpose is basically the same as persist, but it has different implementation details. The documentation for this method strictly states that it persists the instance, “first assigning a generated identifier”. The method is guaranteed to return the Serializable value of this identifier.

    와이즈 비즈
    Person person = new Person();
    person.setName("John");
    Long id = (Long) session.save(person);
    
    
    와이즈 비즈

    업데이트 (방법)

    와이즈 비즈

    The effect of saving an already persisted instance is the same as with persist. Difference comes when you try to save a detached instance:

    와이즈 비즈
    Person person = new Person();
    person.setName("John");
    Long id1 = (Long) session.save(person);
    session.evict(person);
    Long id2 = (Long) session.save(person);
    
    

    자세한 내용은이 링크를 참조하십시오

    The id2 variable will differ from id1. The call of save on a detached instance creates a new persistent instance and assigns it a new identifier, which results in a duplicate record in a database upon committing or flushing.

관련 자료

  • 이전 python - numpyallclose가 비대칭 비교를 사용하는 이유는 무엇입니까?
  • 다음 Flutter에서 PageView 페이지의 배경색 사이에 그라디언트를 만드시겠습니까?