1

我正在使用 Hibernate 4.2.x,我想禁用 HiLo 序列生成 - 每次都去数据库(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 彼此远离。

查看了一些问题(例如此处此处),但没有发现任何帮助。更何况,我找不到在哪里配置要使用的优化器

4

1 回答 1

1

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

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

于 2015-01-27T13:59:24.410 回答