10

エンティティクラスを次のようにマッピングしました。

@Entity
@Audited
@Table(name="messages_locale")
public class Locale {

    @Id
    @GeneratedValue
    @Getter @Setter //Project Lombok's annotations, equal to generated getter and setter method
    private int id;
        (...)

クリーンな新しいデータベースとプロパティを作成します。

<prop key = "hibernate.hbm2ddl.auto"> create </ prop>

データベースを作成した後、なぜ地獄(申し訳ありませんが、このバグでほぼ2日が無駄になりました)、postgresデータベースにシーケンスがありますか?:

CREATE SEQUENCE hibernate_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 2
  CACHE 1;
ALTER TABLE hibernate_sequence
  OWNER TO postgres;

シーケンスは必要ありません。自動生成された値を自動インクリメントするだけです。

4

2 に答える 2

23

PostgreSQLでは、自動インクリメントはSERIAL疑似型を使用して処理されます。を実行するときにこのタイプを使用しますCREATE TABLE

ここで要点-このSERIAL疑似型はシーケンスを作成します。の自動インクリメントはPostgreSQL、作成されたシーケンスを使用して処理されます。id列のデフォルト値は-になりnextval('your_sequence_name')ます。

UserエンティティのHibernateの場合:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "users_seq_gen")
@SequenceGenerator(name = "users_seq_gen", sequenceName = "users_id_seq")
public Long getId() {
     return id;
}

ここを読んでください:

http://www.postgresql.org/docs/8.4/static/datatype-numeric.html#DATATYPE-SERIAL

http://www.neilconway.org/docs/sequences/

于 2012-10-28T08:54:04.447 に答える