我可以在http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml看到很多生成器类 用于生成标识符。 (官方名单在这里:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#d0e5294)
但如果我看increment
和sequence
,它们听起来一样,我不确定区别是什么,哪个更好?
答案 0 :(得分:14)
Sequence
使用数据库序列(例如在Oracle中)生成id,而increment
在jvm中跟踪id并在进程内递增它。如果要将任何其他程序/人员插入数据库表,则序列更安全。
使用序列:
CREATE SEQUENCE mySquence;
) 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")