我正在使用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远离彼此创造。
查看了一些问题(例如here和here),但没有找到任何有用的信息。更多的是,我找不到配置哪个Optimizer的位置。
答案 0 :(得分:0)
对hibernate不太熟悉,我的猜测是它使用Oracle数据库序列作为源。 Oracle序列的一个特性是序列缓存。如果设置了高速缓存大小,则检查序列的定义(默认值= 20)。我知道在重新启动数据库后,无论如何都会清除缓存,以便在连续丢失数字时进行清除。 使用以下命令修改序列: 改变序列MY_SEQ nocache;
请记住,未缓存序列时,OLAP性能可能会下降。