在自定义序列生成器中使用Hibernate distributionSize

时间:2019-03-06 13:32:46

标签: java postgresql hibernate jpa

我们使用的是SequenceGenerator,它使用了PostgreSQL数据库的序列。我们知道默认情况下,allocationSize()为50。

问题是我们要转向自定义序列生成器,该序列生成器扩展了SequenceGenerator类并覆盖了generate()函数。但是有些方法是行不通的,并且每次都将DB与数据库联系,并且在将当前序列乘以allocateSize()之后不会在服务器上保留缓冲区。

这是客户序列生成器的当前代码:

    public class UseExistingOrGenerateIdGenerator extends SequenceGenerator {

    @Override
    public Serializable generate(SessionImplementor session, Object object)
            throws HibernateException {
        Serializable id = session.getEntityPersister(null, object)
                .getClassMetadata().getIdentifier(object, session);
        return id != null ? id : (super.generate(session, object));
    }

}

在其他一些类中定义了吸气剂:

    @Id
    @Column(name = "PrimaryID", nullable = false, precision = 38, scale = 0)

    @GenericGenerator(name = "primaryIdSeq",
            strategy = "com.data.generator.sequence.UseExistingOrGenerateIdGenerator",
            parameters = {
                    @Parameter(name = "sequence", value = "Primary_id_SEQUENCE")
            })
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "primaryIdSeq")
    public BigDecimal getReturnId() {
        return this.returnId;
    }

0 个答案:

没有答案