2012-11-18 4 views
1

현재 Spring MVC/Hibernate 애플리케이션을 설정 중이다.이 애플리케이션은 사람들의 데이터베이스를 저장할 것이다.Spring MVC/Hibernate에서 다중 값 업데이트하기

나는 다음 튜토리얼 (주석 제거) 사용하여 설정 한

: 업데이트 된 각 필드 (지정하지 않고, http://krams915.blogspot.co.uk/2011/01/spring-mvc-3-hibernate-annotations.html

public void edit(Person person) { 
    logger.debug("Editing existing person"); 
    Session session = sessionFactory.getCurrentSession(); 
    Person existingPerson = (Person) session.get(Person.class, person.getId()); 
    existingPerson.setFirstName(person.getFirstName()); 
    existingPerson.setLastName(existingPerson.getLastName()); 
    existingPerson.setMoney(existingPerson.getMoney()); 
    session.save(existingPerson); 
} 

내가 모든 사람을 업데이트 할 수있는 방법이 있나요를 예를 들어 existingPerson .setFirstName (person.getFirstName());)? 프로젝트가 확장 될 때마다 매번이 클래스를 업데이트하지 않고도 필요한만큼 필드를 쉽게 추가 할 수 있기를 원합니다.

의견에 다음과 같은 제안이있었습니다 session.update (page);가 작동하지만이 작업은 오류 ()와 동일한 식별자 값을 가진 다른 객체가 이미 세션과 연결되어 있습니다.

+1

'사람이 updatedAndPersistentPerson = session.merge (사람)'을 사용하십시오. –

+0

나는 이것을 시험해 보았고, session.merge (person)는 나머지없이 잘 작동하는 것처럼 보인다. – Toby

+1

나머지는'session.merge (person)'의 결과를 변수에 할당하는 것으로 만 구성됩니다. 'update()'와'persist()'와는 달리, merge()는 분리 된 엔티티의 상태가 복사 된 첨부 된 엔티티 인 것을 알려주는 것입니다. 첨부 된 엔티티를 사용하여 다른 작업을하려면 메서드의 인수가 수정되지 않고 분리되어 있기 때문에 메서드의 결과를 사용해야합니다. –

답변

0

함수의 Person 매개 변수는 어떻게 생성됩니까? id는 이미 해당 객체에 대해 존재하므로 함수 호출 전에 데이터베이스에서 가져온 것으로 가정합니다.

그래서이 경우에는 session.save (person) 만 사용해야합니다.