2015-07-22 2 views
6

Ich verwende Hibernate mit einer MySQL-Datenbank in meinem Frühjahr MVC-Projekt. Ich habe die @GeneratedValue Annotation verwendet, um Auto-Inkremenet für meine ID-Felder festzulegen. So sind alle meine Einheiten haben dieses Stück Code und alles funktioniert wie erwartet:Hibernate - Wie setze ich automatische Inkrementierung in mysql und Oracle Datenbanken?

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name = "id") 
private Integer id; 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

Zu diesem Zeitpunkt möchte ich zu einer Oracle-Datenbank wechseln. Nun habe ich zwei Fragen hier:

1. Was ist die beste Lösung, um Auto-Inkrement-Feld in Oracle einzustellen? Ich habe diesen Code, aber nicht funktioniert:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "id_Sequence") 
@SequenceGenerator(name="id_Sequence", allocationSize=1) 

2 (Weitere wichtige Frage). Gibt es eine Möglichkeit, eine eindeutige Annotation zu verwenden, um automatisches Inkrement festzulegen, das sowohl für MySQL als auch für Oracle funktioniert?

Antwort

0

1: Wenn Sie Ihren eigenen Generator definieren, Ihr haben in @GeneratedValue den Generator Attribut zu verwenden. Und wenn Sie Ihre eigene Sequenz erstellt haben, müssen Sie den Namen mit sequenceName definieren, sonst erstellt Hibernate eine für Sie.

@SequenceGenerator(name="some_gen", sequenceName="Emp_Seq") 
@GeneratedValue(generator="some_gen") 

2: Die flexibelste (und tragbar) Weg, um die TABLE Strategie zu verwenden ist

@GeneratedValue(strategy=GenerationType.TABLE) 

oder expliziter

@GeneratedValue(generator="some_gen") 
@TableGenerator(name="some_gen", 
    table="ID_GEN", 
    pkColumnName="GEN_NAME", 
    valueColumnName="GEN_VAL") 

Diese (wenn Schemagenerierung generiert aktiviert ist) eine Tabelle ID_GEN mit den Spalten GEN_NAME, GEN_VALUE, wenn die Schema-Generierung nicht verfügbar ist, müssen Sie diese Tabelle selbst erstellen.

Sie finden mehr alle Informationen von Hibernate docs hier: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch05.html#mapping-declaration-id-generator

+0

Dank für Ihre Antwort danken. Sie müssen "strategy = GenerationType.SEQUENCE" nicht in Ihrem ersten Vorschlag verwenden? – hamed

+0

Ich denke nicht, weil Sie Ihren Generator als '@ SequenceGenerator' definiert haben. –

+0

Ich habe '@ SequenceGenerator (Name = "Some_gen", SequenceName = "Emp_Seq") @GeneratedValue (Generator = "Some_gen") 'über meine ID, aber nicht funktioniert. Auch '@GeneratedValue (strategie = GenerationType.TABLE)' funktioniert nicht. – hamed

Verwandte Themen