2017-06-25 5 views
1

Ich habe diese Anmerkung eine Sequenz-ID angeben:Hibernate Sequenz-ID-Spezifikation

@Id 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "parametro_seq_gen") 
@SequenceGenerator(name = "parametro_seq_gen", sequenceName = "PARAMETROS_SQ", 
     allocationSize = 1, initialValue = 1) 

ich es sehr ausführlich finden auf alle meine Einheiten zu wiederholen.

Gibt es eine Möglichkeit, eine benutzerdefinierte Annotation oder etwas zu erstellen? Ich möchte nur den Sequenznamen angeben.

+0

Einige JPA-Anbieter erlauben "Meta-Annotationen" wie Sie vorschlagen http://www.datanucleus.org/products/accessplatform_5_1/jpa/annotations.html#meta_annotations Macht Ihr JPA-Anbieter? –

+0

So etwas könnte nützlich sein. Ist es möglich, der Meta-Annotation einen Parameter hinzuzufügen? Weil ich den Sequenznamen senden muss. Ich kümmere mich um Ihren Kommentar, ich fand etwas ähnliches auf: https://StackOverflow.com/questions/16810269/How-to-create-meta-annotations-on-field-level –

Antwort

0

Ja, können Sie es mit der benutzerdefinierten Anmerkung oder etwas anderes in der Art und Weise Hack tun, aber was ich vorschlagen, ist die Live-Vorlage zu verwenden (Ich bin mit IDEA) enter image description here

enter image description here

1

Das ist einfach!

Erstellen Sie einfach eine package-info.java in dem Unternehmen gespeichert werden und bieten die globale @GenericGenerator dort:

@GenericGenerator(
    name = "pooled", 
    strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", 
    parameters = { 
     @Parameter(name = "sequence_name", value = "sequence"), 
     @Parameter(name = "initial_value", value = "1"), 
     @Parameter(name = "increment_size", value = "5"), 
    } 
) 
package com.vladmihalcea.book.hpjp.hibernate.identifier.globalsequence; 

Dann Ihre Entitäten die pooled generic Generator teilen sich wie folgt:

@Entity(name = "Post") 
public class Post { 

    @Id 
    @GeneratedValue(generator = "pooled") 
    private Long id; 
} 

@Entity(name = "Announcement") 
public class Announcement { 

    @Id 
    @GeneratedValue(generator = "pooled") 
    private Long id; 
} 

Sie müssen @GenericGenerator verwenden seit @SequenceGenerator ist nicht auf Pakete anwendbar.

Das war's!

+0

Dank Vlad, sorry vielleicht habe ich nicht meine angegeben Situation richtig. Alle Entitäten haben unterschiedliche Sequenzen, eine für jede Entität. Aber für alle von ihnen möchte ich die gleichen Eigenschaften, wie Zuteilungsgröße und Anfangswert. Ich suchte nach einer Möglichkeit, nur zu kommentieren: @Sequence ("PARAMETROS_SQ"), @Sequence ("CONSULTAS_SQ"). –

+0

Das wird nicht funktionieren. Sie verwenden entweder dieselbe Definition oder stellen eine neue zur Verfügung. Es gibt keine Möglichkeit, eine Basendefinition wiederzuverwenden und sie trotzdem auf Entitätsbasis zu überschreiben. –

+0

Ich dachte, etwas wie das Schreiben einer benutzerdefinierten Anmerkung? Die Idee besteht darin, den Entwicklern zu ermöglichen, die Sequenz zu spezifizieren. Ist so etwas möglich? –