休眠在启动时创建空 table - hibernate_sequence
hibernate creating empty table - hibernate_sequence at startup
所以我刚刚下载了 hibernate 5.0.0.1,并尝试了我的项目,它以前使用的是 hibernate 4.3。
当我插入数据库时,出现以下错误:
ERROR: could not read a hi value - you need to populate the table: hibernate_sequence
我用的是mysql,我的生成策略设置在GenerationType.auto,看来现在hibernate认为使用序列是最好的生成值策略。但是 table 是空的。我认为休眠试图从序列中获取一个值,但找不到任何值。但是我很困惑,因为 hibernate_sequence 是由休眠创建的,它不应该提供一个初始值吗?
顺序 table 是因为您如何在实体的 one/all 上定义主键。
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // or GenerationType.SEQUENCE
protected Long id;
如果您想使用 table 的标识列:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
您可以查看此线程以获取更多信息:
https://forums.hibernate.org/viewtopic.php?f=1&t=999785&start=0
@GeneratedValue JPA Annotation
Quite often in these tutorials, we have used the @GeneratedValue
annotation to have thedatabase generate a unique primary key for us.
We have used the default Generation Type in each of our examples, but
there are actually four different strategies for having the primary
key generated by the database. Those four options are:
AUTO IDENTITY TABLE SEQUENCE javax.persistence.GenerationType.AUTO
The AUTO generation strategy is the default, and this setting simply
chooses the primary key generation strategy that is the default for
the database in question, which quite typically is IDENTITY, although
it might be TABLE or SEQUENCE depending upon how the database is
configured. The AUTO strategy is typically recommended, as it makes
your code and your applications most portable.
javax.persistence.GenerationType.IDENTITY
The IDENTITY option simply allows the database to generate a unique
primary key for your application. No sequence or table is used to
maintain the primary key information, but instead, the database will
just pick an appropriate, unique number for Hibernate to assign to the
primary key of the entity. With MySQL, the first lowest numbered
primary key available in the table in question is chosen, although
this behavior may differ from database to database.
javax.persistence.GenerationType.Sequence
Some database vendors support the use of a database sequence object
for maintaining primary keys. To use a sequence, you set the
GenerationType strategy to SEQUENCE, specify the name of the generator
annotation, and then provide the @SequenceGenerator annotation that
has attributes for defining both the name of the sequence annotation,
and the name of the actual sequence object in the database.
Simple solution :
创建 hibernate_sequence table 作为 :
"create sequence <schema/db>.hibernate_sequence"
创建它是因为 Hibernate 使用那个 table 来跟踪自动递增 ID(ID 的下一个值)
Ex-
@Id
@GeneratedValue
int id;
所以我刚刚下载了 hibernate 5.0.0.1,并尝试了我的项目,它以前使用的是 hibernate 4.3。
当我插入数据库时,出现以下错误:
ERROR: could not read a hi value - you need to populate the table: hibernate_sequence
我用的是mysql,我的生成策略设置在GenerationType.auto,看来现在hibernate认为使用序列是最好的生成值策略。但是 table 是空的。我认为休眠试图从序列中获取一个值,但找不到任何值。但是我很困惑,因为 hibernate_sequence 是由休眠创建的,它不应该提供一个初始值吗?
顺序 table 是因为您如何在实体的 one/all 上定义主键。
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // or GenerationType.SEQUENCE
protected Long id;
如果您想使用 table 的标识列:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;
您可以查看此线程以获取更多信息: https://forums.hibernate.org/viewtopic.php?f=1&t=999785&start=0
@GeneratedValue JPA Annotation
Quite often in these tutorials, we have used the @GeneratedValue annotation to have thedatabase generate a unique primary key for us. We have used the default Generation Type in each of our examples, but there are actually four different strategies for having the primary key generated by the database. Those four options are:
AUTO IDENTITY TABLE SEQUENCE javax.persistence.GenerationType.AUTO
The AUTO generation strategy is the default, and this setting simply chooses the primary key generation strategy that is the default for the database in question, which quite typically is IDENTITY, although it might be TABLE or SEQUENCE depending upon how the database is configured. The AUTO strategy is typically recommended, as it makes your code and your applications most portable.
javax.persistence.GenerationType.IDENTITY
The IDENTITY option simply allows the database to generate a unique primary key for your application. No sequence or table is used to maintain the primary key information, but instead, the database will just pick an appropriate, unique number for Hibernate to assign to the primary key of the entity. With MySQL, the first lowest numbered primary key available in the table in question is chosen, although this behavior may differ from database to database.
javax.persistence.GenerationType.Sequence
Some database vendors support the use of a database sequence object for maintaining primary keys. To use a sequence, you set the GenerationType strategy to SEQUENCE, specify the name of the generator annotation, and then provide the @SequenceGenerator annotation that has attributes for defining both the name of the sequence annotation, and the name of the actual sequence object in the database.
Simple solution :
创建 hibernate_sequence table 作为 :
"create sequence <schema/db>.hibernate_sequence"
创建它是因为 Hibernate 使用那个 table 来跟踪自动递增 ID(ID 的下一个值)
Ex-
@Id
@GeneratedValue
int id;