[英]Manually assign value to a hibernate UUID
我们知道,在hibernate中,将id的生成器配置为“uuid”,然后hibernate将在保存新对象时自动为id字段生成UUID值。如果将生成器配置为“assigned”,则必须分配id保存对象之前的值。
我发现如果将生成器配置为uuid并手动为id赋值,则hibernate会将值更改为新的UUID值。
我的问题是,当生成器配置为uuid时,如何手动为其分配值?
PS:我使用spring HibernateDaoSupport来保存。
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;
}
}
并通过将其完全限定名称设置为strategy
来配置Hibernate以使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.