ペタルから受け入れられた答えは正しくないか、もはや正しくないと思います。 Postgresの自動インクリメントは、SERIAL
を介して処理されます 疑似タイプ、その通りです。ただし、Petarが提供するマッピングにより、Hibernate5.1によって生成される次のDDLが生成されます。
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
これはSERIAL
を使用していません 、ただし、Hibernate管理シーケンス。これはテーブルによって所有されておらず、デフォルト値は設定されていません。もちろん、DDL生成は多くの人が本番環境で使用しない機能です(ただし、多くの人は生成されたコードをテンプレートとして使用します)。
DDLを手書きし、実際にSERIAL
を使用した場合 、次にGenerationType.SEQUENCE
を使用します データベースの動作と競合することさえあります。 HibernateをPostgresの優先ID戦略にマッピングする正しい方法は、GenerationType.IDENTITY
を使用することです。 。ちなみに、コードもはるかに短く、読みやすくなっています:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;