2011-03-22 5 views
3

우리가 알고있는 것처럼, 최대 절전 모드에서는 id의 생성자를 "uuid"로 설정 한 다음 최대 절전 모드로 새 개체를 저장할 때 id 필드에 UUID 값을 자동으로 생성합니다. "assigned"로 설정하려면 객체를 저장하기 전에 id에 값을 할당해야합니다.수동으로 최대 절전 모드 UUID에 값을 할당하십시오.

그리고 생성자를 uuid로 구성하고 id 값을 수동으로 할당하면 최대 절전 모드에서 값이 새로운 UUID 값으로 변경됩니다.

제 질문은 발전기가 uuid로 구성되어있을 때 수동으로 값을 지정하는 방법입니다.

추신 : 봄철 HibernateDaoSupport를 사용하여 저장합니다.

org.springframework.orm.hibernate3.support.HibernateDaoSupport.save(Ojbect obj) 

고마워요!

+1

왜 필요합니까? – Bozho

+0

시스템 AA는 메시지를 작성, 저장 및 전송하고 응답 메시지를 수신합니다. 프로세스에서 메시지의 ID는 키 플래그로 사용됩니다. 이제 시스템 BB가 AA에 추가하고 AA에서 응답 메시지를 받기를 원하는 메시지가 있습니다. 시스템 AA에서 최소한의 변경 작업을 수행하려면 시스템 BB의 ID를 시스템 AA의 메시지 ID로 사용해야합니다. –

답변

8

드문 특별한 경우에만 필요하면 가장 간단한 방법은 save() 대신 네이티브 SQL에서 INSERT 쿼리를 발행하는 것입니다.

public class FallbackUUIDHexGenerator extends UUIDHexGenerator { 
    private String entityName; 

    @Override 
    public void configure(Type type, Properties params, Dialect d) 
      throws MappingException { 
     entityName = params.getProperty(ENTITY_NAME); 
     super.configure(type, params, d); 
    } 

    @Override 
    public Serializable generate(SessionImplementor session, Object object) 
      throws HibernateException {    
     Serializable id = session 
      .getEntityPersister(entityName, object) 
      .getIdentifier(object, session);  

     if (id == null) 
      return super.generate(session, object); 
     else 
      return id; 
    } 
} 

strategy로의 완전한 이름을 설정하여 그것을 사용하는 최대 절전 모드를 구성합니다

다른 방법으로는 원하는 동작을 달성하기 위해 발전기를 사용자 정의 할 수 있습니다.

+0

맞춤형 발전기를 이용해 주셔서 감사합니다. – nheid