web-dev-qa-db-ja.com

空のテーブルを作成するhibernate-起動時のhibernate_sequence

そのため、hibernate 5.0.0.1をダウンロードし、以前はhibernate 4.3を使用していたプロジェクトを試してみました。

データベースに挿入すると、次のエラーが発生します。

エラー:hi値を読み取れませんでした-テーブルにデータを入力する必要があります:hibernate_sequence

私はmysqlを使用しており、私の生成戦略はGenerationType.autoに設定されています。Hibernateは、シーケンスの使用が値を生成するための最良の戦略であると考えているようです。しかし、テーブルは空です。 hibernateはシーケンスから値を取得しようとしていますが、何も見つかりません。しかし、hibernate_sequenceがhibernateによって作成されているため、混乱しています。初期値を提供すべきではありませんか?

13
morbidCode

シーケンステーブルは、1つまたはすべてのエンティティで主キーを定義した方法が原因です。

@Id
@GeneratedValue(strategy = GenerationType.AUTO) // or GenerationType.SEQUENCE
protected Long id;

テーブルのID列を使用する場合:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Long id;

詳細については、このスレッドを確認してください: https://forums.hibernate.org/viewtopic.php?f=1&t=999785&start=

@GeneratedValue JPAアノテーション

これらのチュートリアルではかなり頻繁に、@ GeneratedValueアノテーションを使用して、データベースに一意の主キーを生成させています。各例ではデフォルトの生成タイプを使用しましたが、データベースで主キーを生成させるための実際の戦略は4つあります。これらの4つのオプションは次のとおりです。

AUTO IDENTITY TABLE SEQUENCE javax.persistence.GenerationType.AUTO

AUTO生成戦略はデフォルトであり、この設定は、問題のデータベースのデフォルトである主キー生成戦略を選択するだけです。これは通常、IDENTITYですが、データベースの構成に応じてTABLEまたはSEQUENCEになる場合があります。 AUTO戦略は、コードとアプリケーションを最も移植しやすくするため、通常は推奨されます。

javax.persistence.GenerationType.IDENTITY

IDENTITYオプションを使用すると、データベースでアプリケーションに固有の主キーを生成できます。主キー情報を維持するためにシーケンスやテーブルは使用されませんが、代わりに、データベースはHibernateがエンティティの主キーに割り当てる適切な一意の番号を選択するだけです。 MySQLでは、問題のテーブルで使用可能な最初の最も小さい番号の主キーが選択されますが、この動作はデータベースによって異なる場合があります。

javax.persistence.GenerationType.Sequence

一部のデータベースベンダーは、主キーを維持するためのデータベースシーケンスオブジェクトの使用をサポートしています。シーケンスを使用するには、GenerationType戦略をSEQUENCEに設定し、ジェネレータアノテーションの名前を指定してから、シーケンスアノテーションの名前と実際のシーケンスオブジェクトの名前の両方を定義するための属性を持つ@SequenceGeneratorアノテーションを提供します。データベース。

23
John Manko

Hibernateがそのテーブルを使用して自動インクリメントId(IDの次の値)を追跡するため、作成されます

@Id
@GeneratedValue
int id;
1
Rajitha Yasas

簡単な解決策:

hibernate_sequenceテーブルを次のように作成します。

"create sequence <schema/db>.hibernate_sequence"
0
Riddhi Gohil