禁用休眠HiLo序列生成

时间:2015-01-27 13:28:43

标签: java oracle hibernate jpa hilo

我正在使用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行为 - ids远离彼此创造。

查看了一些问题(例如herehere),但没有找到任何有用的信息。更多的是,我找不到配置哪个Optimizer的位置。

1 个答案:

答案 0 :(得分:0)

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

请记住,未缓存序列时,OLAP性能可能会下降。