Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 如何对所有映射使用相同的IdentifierGenerator实例_Java_Hibernate - Fatal编程技术网

Java 如何对所有映射使用相同的IdentifierGenerator实例

Java 如何对所有映射使用相同的IdentifierGenerator实例,java,hibernate,Java,Hibernate,使用IdentifierGenerator类时 <id name="id" column="id" type="long"> <generator class="com.persistence.generator.CustomGenerator"> <param name="max_lo">5</param> <param name="sequence">A_SEQ</param>

使用IdentifierGenerator类时

<id name="id" column="id" type="long">
    <generator class="com.persistence.generator.CustomGenerator">
        <param name="max_lo">5</param>
        <param name="sequence">A_SEQ</param>
    </generator>
</id>

5.
A_SEQ
如果在多个类映射中使用相同的CustomGenerator类,则Hibernate会按类映射实例化CustomGenerator类


是否可以只生成一个实例?

嗯,我不确定您是否可以共享一个实例,但您当然可以编写一个轻量级代理生成器来为您执行此操作,如下所示(为了简洁起见,我在这里使用静态,但这很容易是一个单例模式或类似模式):

然后在Hibernate配置中使用SharedGenerator,因为所有实例都将调用基础生成器的同一实例

import org.hibernate.id.IdentifierGenerator;

public class SharedGenerator implements IdentifierGenerator {
    private static final IdentifierGenerator underlyingGenerator = new UUIDGenerator();

    @Override
    public Serializable generate(SessionImplementor sessionImplementor, Object o) throws HibernateException {
        return underlyingGenerator.generate(sessionImplementor, o);
    }
}