2014-12-16 5 views
1

내 응용 프로그램의 엔터티에 DB 엔터티와 다른 데이터가 들어있을 때마다 데이터베이스의 엔터티를 업데이트하려고합니다.DB에서 엔티티를 효과적으로 업데이트하는 방법은 무엇입니까?

내 업데이트 방법은 다음과 같습니다

@Transactional 
    public void updateEntity(String a, String b, boolean c, Date d) { //some more params 
     MyEntity entity = dao.findEntityBy(a, b, c); //might be some more params 
     //nullcheck 

     if (!entity.getA().equals(a)) { 
      entity.setA(a); 
     } 
     if (!entity.getB().equals(b)) { 
      entity.setB(b); 
     } 
     //repeat per property... a-n 

     dao.save(entity); 
    } 

질문 : 내가이 변경된 경우 엔티티의 각 속성을 확인하고 만 세터를 사용해야합니까? 아니면 그냥 검사를 건너 뛰고 엔터티를 재정의해야합니까?

MyEntity entity = dao.findEntityBy(a, b, c); 
entity.setA(a); 
entity.setB(b); 
//... 
dao.save(entity); 

어떤 방법이 있습니까? 두 솔루션의 장점은 무엇입니까? 모든 "제작 준비"소프트웨어

답변

2

꽤 많은 당신은

MyEntity entity = dao.findEntityBy(a, b, c); 
entity.setA(a); 
entity.setB(b); 
//... 
dao.save(entity); 

내가 첫 번째 옵션에 부가 가치를 볼 수 없습니다 솔직히 말해서 두 번째 버전을 확인 (단, 유지 보수 및 낮은 읽기 쉽게 볼 수있는 추가) 할 수 있습니다.

3

많은 특성이있는 경우 dynamic-update=true을 사용하여 성능을 최적화 할 수 있습니다. dynamic-update 속성은 Hibernate에게 수정되지 않은 속성들을 SQL UPDATE 문에 포함 시킬지 여부를 알려준다.

나 또한`selectBeforeUpdate = TRUE '를 설정해야합니까

@Entity 
@Table(name = "MY_ENTITY") 
@org.hibernate.annotations.Entity(
     dynamicUpdate = true 
) 
public class MyEntity { 
} 
+0

로 구성 할 수 있습니다? 아니면'@ Transactional'에서 이미 엔터티를 선택했기 때문에 추가 선택을 트리거 할 필요가 없습니까? – membersound

+0

그리고'@ DynamicUpdate'의 이점을 고려해 볼 때, 최대 절전 모드가 모든 SQL 문을 동적으로 재생성해야한다는 사실은 무시 될 수 있습니다. 우리는 string.length가 약 200자인 엔티티 레코드에 대해 말하고 있습니다. 예를 들어 종종 단일 행 번호 만 업데이트 될 수 있습니다 (예 : 재고 보유 가능). – membersound

+0

selectBeforeUpdate = true에 대해서는 사용하지 않아도되지만 실제로 지정하면 어떻게되는지 알 수 있습니다. 동적 업데이트에 대한 열 번호는 열 값이 중요하지 않습니다. –

관련 문제