2011-03-22 45 views
3

正如我們所知,在hibernate中,將id的生成器配置爲「uuid」,然後當保存一個新對象時,hibernate會自動爲id字段生成一個UUID值。如果配置生成器爲「分配」,必須在保存對象之前爲該ID分配一個值。手動賦值給休眠UUID

我發現如果將生成器配置爲uuid並手動爲該id分配一個值,則hibernate會將該值更改爲新的UUID。

我的問題是,當生成器配置爲uuid時,如何手動爲其賦值? PS:我使用spring HibernateDaoSupport來保存。

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

謝謝!

+1

你爲什麼需要這個? – Bozho 2011-03-22 12:25:17

+0

系統AA創建,保存併發送消息,並接收回復消息。在這個過程中,消息的ID被用作關鍵標誌。現在,來自系統BB的消息要添加到AA中,並從AA接收應答消息。爲了在系統AA上做最少的更改,我需要使用系統BB中的ID作爲系統AA中的消息ID。 – 2011-03-22 14:25:32

回答

8

如果只在極少數特殊情況下需要它,最簡單的方法是在本機SQL中發出INSERT查詢,而不是使用save()

或者,您也可以自定義生成器來實現所需的行爲:

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; 
    } 
} 

和配置Hibernate通過設置它的全名是strategy使用它。

+0

感謝您定製的發電機 – nheid 2013-07-19 08:22:08