2017-12-26 29 views
1

私のアプリケーションでは、PostgreSQLでStringデータJPAを使用しています。私のアプリケーションのすべてのエンティティについて、純粋にデータベース側でIDを生成する方法を探しています。SpringデータJPAはデータベース側のIDを生成する前に作成する

ので、例えば、ここに私の現在の作業バージョン:

@Entity 
@Table(name = "permissions") 
public class PermissionEntity { 

    @Id 
    @SequenceGenerator(name="permSeq", sequenceName="perm_id_seq", allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="permSeq") 
    private Short id; 

    ........... 
} 

私は同じデータベースで動作するアプリケーションの複数のインスタンスを、持っていますので、私は、競合を避けるためにallocationSize = 1を使用しています。

この場合、permissionを作成する前に、アプリケーションはデータベースperm_id_seqシーケンスに次の値を受け取るよう要求します。私はidを純粋にデータベース側に作成したいと考えています(jdbc templateの場合のように)。私はid = nextval('perm_id_seq'::regclass)のデフォルト値を設定し、自分のコードを修正することを行うために:私は、エンティティを保存しようとしているとき

@Entity 
@Table(name = "permissions") 
public class PermissionEntity { 

    @Id 
    private Short id; 

    ........... 
} 

することは今では例外をスロー:

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save() 

明らかである理由私のために。しかし、誰かが私に言いたいことがありますが、私が望むようにデータベース側にidを生成することは可能ですか?

答えて

3

あなたのIDに使用GenerationType.IDENTITY、これはID列のIDがDB側で生成されることを冬眠教えてくれます:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Short id; 
+0

はどうもありがとうございました!それは正常に動作します –

関連する問題