禁用休眠 HiLo 序列生成

Disable hibernate HiLo Sequence generation

我正在使用 Hibernate 4。2.x 我想禁用 HiLo 序列生成 - 每次都转到 DB (oracle)。 我将此行添加到 persistance.xml:

 <property name="hibernate.id.new_generator_mappings" value="true"/>

我的实体看起来像这样:

@Entity
@Table(name = "MY_TABLE")
@SequenceGenerator(name = "generator", sequenceName = "MY_SEQ", initialValue = 1, allocationSize = 1)
public class MyEntity {

    private long id;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
    public Long getId()
    {
        return id;
    }
}

出于某种原因,我仍然遇到 HiLo 行为 - 创建的 ID 彼此远离。

看了一些问题(here and here for example), but didn't find anything helpful. More ever, I couldn't find where to configure which Optimizer使用。

由于对 hibernate 不太熟悉,我的猜测是它使用 Oracle 数据库序列作为源。 Oracle 序列的特性之一是序列缓存。如果设置了高速缓存大小(默认值 = 20),请检查序列的定义。我知道在重新启动数据库后缓存无论如何都会被清除,所以那是你丢失连续数字的时候。 使用命令修改序列: 改变序列 MY_SEQ nocache;

请记住,如果不缓存序列,OLAP 性能可能会下降。