Database 手动将值分配给hibernate UUID
我们知道,在hibernate中,将id的生成器配置为“uuid”,然后hibernate将在保存新对象时自动为id字段生成uuid值。如果将生成器配置为“已分配”,则必须在保存对象之前为id分配一个值 我发现,如果将生成器配置为uuid并手动为id分配一个值,hibernate会将该值更改为新的uuid值 我的问题是,当生成器配置为uuid时,如何手动为其分配值 PS:我使用spring HibernateDaoSupport来保存Database 手动将值分配给hibernate UUID,database,hibernate,spring,uuid,Database,Hibernate,Spring,Uuid,我们知道,在hibernate中,将id的生成器配置为“uuid”,然后hibernate将在保存新对象时自动为id字段生成uuid值。如果将生成器配置为“已分配”,则必须在保存对象之前为id分配一个值 我发现,如果将生成器配置为uuid并手动为id分配一个值,hibernate会将该值更改为新的uuid值 我的问题是,当生成器配置为uuid时,如何手动为其分配值 PS:我使用spring HibernateDaoSupport来保存 org.springframework.orm.hibern
org.springframework.orm.hibernate3.support.HibernateDaoSupport.save(Ojbect obj)
谢谢 如果您只在极少数特殊情况下需要它,最简单的方法是在本机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
,从而配置Hibernate以使用它。system AA创建、保存和发送消息,并接收回复消息。在此过程中,消息的id用作密钥标志。现在,有来自系统BB的消息要添加到AA中,并接收来自AA的回复消息。为了在系统AA上做最少的更改,我需要使用系统BB的id作为系统AA中消息的id。