2012-03-28 7 views
4

Ich habe ein Problem ids für neue Objekte zu erzeugen, habe ich versucht:Wie ID annotieren, so ist es Autoincrements ohne Sequenztabelle?

@Id 
@GeneratedValue 
private Long myId; 

und

@Id 
@GeneratedValue(generator="increment") 
@GenericGenerator(name="increment", strategy = "increment") 
private Long myId; 

aber auf entityManager.persist bekomme ich Table "SEQUENCE" not found In reiner Hibernate generator class="increment" für mich funktionierte gut.

+0

Welche DB verwenden Sie? – joel1di1

+0

H2-Datenbank. generator class = "increment" in reinem Ruhezustand gearbeitet – bunnyjesse112

Antwort

13

Sie myid als Autoinkrement/Identitätsspalte in der Datenbank definieren könnte und folgende Art und Weise entsprechende Feld Einheit mit Anmerkungen versehen:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long myId; 

, dass zumindest funktioniert mit H2 1.3.160 & Hibernate 3.6.8.

+0

Danke mann! .... – bunnyjesse112

+0

Ich möchte betonen, wie wichtig es ist ist, dass die Datenbankspalte als AUTO_INCREMENT definiert ist. – Noumenon

2

Versuchten Sie dieses ..

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 
+0

versucht abzufragen SEQUENCE Tabelle – bunnyjesse112

+0

welche DB benutzen Sie? vielleicht hat dieser Link mehr Informationen - http://stackoverflow.com/questions/2011528/hibernate-auto-incremen-id – Prashanth

+0

h2 database .... – bunnyjesse112

0

Wenn Sie IDs erstellen möchten, die für mehrere persistente Objekte freigegeben (und eindeutig) sind, verwenden Sie den @TableGenerator. H2 und viele andere Datenbanken haben keine interne Unterstützung für Sequenzen, so dass @SequenceGenerator nicht funktioniert.

Hier ist ein kleines Beispiel haben eine einzigartige/shared @Id über zwei Objekte:

@Entity 
public class Class1 { 

    // setting pkColumnValue of TableGenerator is very important ;-) 
    @Id 
    @TableGenerator(
     name = "guid", 
     initialValue = 0, 
     allocationSize = 10, 
     table = "GUID_SEQ", 
     pkColumnName = "GEN_KEY", 
     valueColumnName = "GEN_VALUE", 
     pkColumnValue = "GUID") 
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "guid") 
    private long id; 
} 


@Entity 
public class Class2 { 

    // use the same pkColumnValue 
    @Id 
    @TableGenerator(
     name = "guid", 
     initialValue = 0, 
     allocationSize = 10, 
     table = "GUID_SEQ", 
     pkColumnName = "GEN_KEY", 
     valueColumnName = "GEN_VALUE", 
     pkColumnValue = "GUID") 
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "guid") 
    private long id; 
} 
Verwandte Themen