我们使用的是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;
}