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

时间:2015-08-13 12:08:36

标签: 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>
    </generator>
</id>

如果在多个类映射中使用相同的CustomGenerator类,Hibernate会为每个类映射实例化CustomGenerator类。

是否可以仅生成单个实例?

1 个答案:

答案 0 :(得分:2)

好吧,我不确定你可以共享一个实例,但是你当然可以编写一个轻量级的代理生成器来为你做这样的事情(我这里使用的是静态的简洁,但这可能很容易成为一个单例模式或类似的):

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

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