복붙노트

[SPRING] 분리 된 객체는 최대 절전 모드에서 어떻게 작동합니까?

SPRING

분리 된 객체는 최대 절전 모드에서 어떻게 작동합니까?

나는 이미 객체가 분리 상태에 있다는 것을 알고 있습니다. 우리가 이미 저장을 클릭하면 다시 객체를 첨부해야합니다.

html 텍스트 필드가있는 폼이 하나 있다고 가정하고 데이터베이스에 텍스트를 저장하는 저장 버튼이 있습니다.

나는 thise 코드가있다.

 public void edit(Person person) {
  logger.debug("Editing existing person");

  // Retrieve session from Hibernate
  Session session = sessionFactory.getCurrentSession();

  // Retrieve existing person via id
  Person existingPerson = (Person) session.get(Person.class, person.getId());

  // Assign updated values to this person
  existingPerson.setFirstName(person.getFirstName());
  existingPerson.setLastName(existingPerson.getLastName());
  existingPerson.setMoney(existingPerson.getMoney());

  // Save updates
  session.save(existingPerson);
 }

이제는 시간을 절약하고 데이터를 저장 할 수 있습니다.

이제는 처음 저장을 클릭하면 분리됩니다. 그래서 나는 그것을 위해 특별한 것을 할 필요가 있거나 중요하지 않습니다.

분리 된 상태에 대해 무엇을 프로그램해야 하는지를 알고 싶습니다.

해결법

  1. ==============================

    1.엔터티를 저장,로드, 가져 오기 또는 찾기 위해 사용 된 세션이 닫히 자마자 엔티티가 분리됩니다. 이것은 세션에 더 이상 연결되어 있지 않으며 다른 POJO처럼 작동한다는 것을 의미합니다.

    엔터티를 저장,로드, 가져 오기 또는 찾기 위해 사용 된 세션이 닫히 자마자 엔티티가 분리됩니다. 이것은 세션에 더 이상 연결되어 있지 않으며 다른 POJO처럼 작동한다는 것을 의미합니다.

    엔티티가 연결되고 속성 중 하나를 변경하면 Hibernate는 데이터베이스에서 해당 행에 대한 변경 사항을 자동으로 저장합니다 (플러쉬 / 커밋 시간에).

    분리되면 오브젝트에 대한 변경 사항이 자동으로 데이터베이스에 저장되지 않습니다. 변경 사항을 저장하려면 session.update () 또는 session.merge ()를 호출하여 직접 변경해야합니다. 두 방법 모두 다소 차이가 있지만, 다르게 적용합니다. 필자는 개인적으로 병합을 사용하는 것을 선호합니다. 병합은 덜 위험하며 적은 버그를 발생시킵니다.

    자세한 내용은 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#objectstate-detached를 참조하십시오.

    귀하의 코드에서, 편집 메서드에 인수로 전달 된 사람은 아마도 분리됩니다. 당신이하는 일은 세션에서 전달 된 것과 같은 ID를 가진 사람을 얻는 것입니다. 따라서 existingPerson이 첨부됩니다. 그런 다음 분리 된 사람의 모든 속성을 연결된 기존 사용자에게 복사합니다. 마지막으로 기존 사용자를 저장합니다.

    이 코드에는 3 가지 문제가 있습니다.

    따라서 다음과 같이 변경해야합니다.

    public void edit(Person person) {
      logger.debug("Editing existing person, which is a detached object");
    
      // Retrieve session from Hibernate
      Session session = sessionFactory.getCurrentSession();
    
      // Retrieve existing person via id, then copy everything from detached person 
      // to attached one, and return attached one
      Person existingPerson = (Person) session.merge(person);
    }
    
  2. from https://stackoverflow.com/questions/5260297/how-does-the-detached-object-work-in-hibernate by cc-by-sa and MIT license