Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 手动将值分配给hibernate UUID_Database_Hibernate_Spring_Uuid - Fatal编程技术网

Database 手动将值分配给hibernate UUID

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

我们知道,在hibernate中,将id的生成器配置为“uuid”,然后hibernate将在保存新对象时自动为id字段生成uuid值。如果将生成器配置为“已分配”,则必须在保存对象之前为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;
    }
}

并将Hibernate的完全限定名设置为
strategy

,从而配置Hibernate以使用它。system AA创建、保存和发送消息,并接收回复消息。在此过程中,消息的id用作密钥标志。现在,有来自系统BB的消息要添加到AA中,并接收来自AA的回复消息。为了在系统AA上做最少的更改,我需要使用系统BB的id作为系统AA中消息的id。