Hibernate生成器类增量vs序列?

时间:2011-09-19 18:43:07

标签: hibernate

我可以在http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml看到很多生成器类 用于生成标识符。 (官方名单在这里:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#d0e5294

但如果我看incrementsequence,它们听起来一样,我不确定区别是什么,哪个更好?

3 个答案:

答案 0 :(得分:14)

Sequence使用数据库序列(例如在Oracle中)生成id,而increment在jvm中跟踪id并在进程内递增它。如果要将任何其他程序/人员插入数据库表,则序列更安全。

使用序列:

  1. 您的数据库必须支持序列(Oracle,DB2,Postgresql ...)
  2. 您应该创建一个序列(CREATE SEQUENCE mySquence;
  3. Increment是不太安全的解决方案(但是对于那些不支持Sequence的数据库而言是可移植的)并且适用于测试和/或入门。有比使用Increment在生产中使用更好的方法(例如本机/身份等)。

答案 1 :(得分:2)

我会使用自动生成的值。然后,Hibernate将为您正在使用的数据库生成最佳策略。

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

也意味着您可以在不更改实体的情况下针对像HsqlDB这样的简单内存数据库进行测试。

答案 2 :(得分:-1)

你可以尝试这一行

@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment")