2017-12-26 4 views
1

In meiner Anwendung verwende ich String-Daten JPA mit PostgreSQL. Und für alle Entitäten in meiner Anwendung suche ich den Weg, Ids rein auf Datenbankseite zu generieren.Spring-Daten JPA generiert ID nur auf Datenbankseite vor dem Erstellen

So zum Beispiel, hier meine arbeitet derzeit Version:

@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; 

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

Ich verwende allocationSize = 1 Konflikte zu vermeiden, weil ich mehrere Instanzen der Anwendung haben werden, die mit der gleichen Datenbank arbeiten.

Aber in diesem Fall jedes Mal vor erstellen permission, macht die Anwendung Anfrage an die Datenbank perm_id_seq Sequenz, um den nächsten Wert zu erhalten. Ich möchte id rein auf Datenbankseite erstellen, wie im Fall mit jdbc template. Zu tun, dass ich Standardwert für die id = nextval('perm_id_seq'::regclass) eingestellt und verändert mein Code:

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

    @Id 
    private Short id; 

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

Nun wirft es eine Ausnahme, wenn ich versuche, Unternehmen zu retten:

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

Der Grund, warum klar ist, für mich. Aber kann mir jemand sagen, ist es möglich, id s auf Datenbankseite zu generieren, wie ich überhaupt wünsche?

Antwort

3

Verwenden GenerationType.IDENTITY für Ihre ID, werden diese überwintern sagen, dass die ID des Identitätsspalts wird auf der Seite DB erzeugt werden:

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

Vielen Dank! Es funktioniert gut –

Verwandte Themen