sql >> データベース >  >> RDS >> PostgreSQL

PostgresのGeneratedValue

    ペタルから受け入れられた答えは正しくないか、もはや正しくないと思います。 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;
    


    1. SQLで数値を丸める方法

    2. アプリケーションが起動するたびにSQLiteテーブルを作成する必要が本当にありますか?

    3. SQLServerループ-一連のレコードをループするにはどうすればよいですか

    4. トリガーとチェック制約