禁用休眠 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 性能可能会下降。
我正在使用 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 性能可能会下降。