2010-04-09 9 views
12

Ich habe den folgenden Code:Hibernate Schema Parameter funktioniert nicht in @SequenceGenerator Anmerkung

@Entity 
@Table(name = "my_table", schema = "my_schema") 
@SequenceGenerator(name = "my_table_id_seq", sequenceName = "my_table_id_seq", 
        schema = "my_schema") 
public class MyClass { 
    @Id 
    @GeneratedValue(generator = "my_table_id_seq", 
        strategy = GenerationType.SEQUENCE) 
    private int id; 

} 

Datenbank: PostgreSQL 8.4, Hibernate Annotations 3.5.0-Finale.

Wenn das Objekt von MyClass Speichern sie die folgende SQL-Abfrage generiert:

select nextval('my_table_id_seq') 

So gibt kein Schema Präfix ist und daher die Sequenz nicht gefunden werden kann. Als ich die SequenceName wie

sequenceName = "my_schema.my_table_id_seq" 

alles funktioniert schreiben.

Habe ich Missverständnisse bezüglich der Bedeutung des Schema-Parameters oder ist es ein Fehler? Irgendwelche Ideen, wie Schema Parameter funktionieren?

+0

hatte ich das gleiche Problem hier und legen das Schema auf dem Sequenznamen, wie Sie haben. Mein @ SequenceGenerator hat keine Schemaeigenschaft. – BrunoJCM

Antwort

0

Hmmm, ich arbeite nicht mit den Interna von viel überwintern, aber es gibt einige Infos hier:

https://forum.hibernate.org/viewtopic.php?p=2406761

Sie können auch das Standardschema für einen Benutzer auf PostgreSQL über ALTER USER verbindet. .. SET SEARCH_PATH

1

Das klingt wie ein Fehler: der JPA-Provider sollte die "neuen" (seit Java Persistence 2.0) schema und catalog Attribute der @SequenceGenerator Annotation berücksichtigen. Ich schlage vor, a Jira issue (die Annotationen und Entity Manager-Projekte sind jetzt im Kern) zu erhöhen, konnte keine vorhandenen finden.

-5

Hallo, ich war mit demselben Problem

aber stellen Sie Ihren hibernate.hbm2ddl.auto zu aktualisieren und zu betreiben.

<property name="hibernate.hbm2ddl.auto">update</property> 
+1

Ich weiß, es ist nach der Tat, aber diese Antwort ist falsch, weil es nur den Generator im Standardschema erstellen würde, die nicht wo Sie es wollen. – Jim

6

Das gleiche Problem hier, sieht aus wie ein Fehler für mich. Ich bin ich eine Methode Siehe Ruhe 3.6.7 Mit Blick auf den Quellcode org.hibernate.cfg.annotations.reflection.JPAOverridenAnnotationReader#buildSequenceGeneratorAnnotation(Element element), die die Werte von name, sequence-name, initial-value und allocation-size Attribute zu kopieren scheint, aber ich sehe keinen Hinweis auf catalog oder schema

i erwartet etwas analog zu Methode getTable(Element tree, XMLContext.Default defaults) (der gleichen Klasse), um zu sehen, die

annotation.setValue("schema", table.schema()); 
annotation.setValue("catalog", table.catalog());` 

oder buildTableGeneratorAnnotation hat, die

copyStringAttribute(ad, element, "catalog", false); 
copyStringAttribute(ad, element, "schema", false); 
hat

Also, auch wenn ein wenig hackish, der Weg herum - für diese Version mindestens - scheint die sequenceName voran zu sein, wie Sie sagen.

0

Versuchen Sie, die SequenceGenerator Anmerkung aus der Klassendeklaration zu id Feld Erklärung POJO bewegen. Mit Hibernate 3.6.4 dieser

@Entity 
@Table(name = "my_table", schema = "my_schema") 
public class MyClass { 
    @Id 
    @GeneratedValue(generator = "my_table_id_seq", 
       strategy = GenerationType.SEQUENCE) 
    @SequenceGenerator(name = "my_table_id_seq", sequenceName = "my_table_id_seq", schema = "my_schema") 
    private int id; 

} 

erzeugt dies für MySQL

create table my_schema.my_table_id_seq (
    next_val bigint 
); 

insert into my_schema.my_table_id_seq values (1); 

und dies für PostgreSQL

create sequence my_schema.my_table_id_seq start 1 increment 50; 
1

Das gleiche Problem, mit Hibernate 4.3.6.Final, mit Feder 4.1.4.RELEASE, auf Oracle Database 11g Enterprise Edition Version 11.2.0.1.0.

Sieht aus wie dies ein Fehler ist =>https://hibernate.atlassian.net/browse/HHH-7232

Wir haben, um das Problem durch ein Synonym in Schema Dieses Synonym war ein Zeige auf die Sequenz in Schema B zu schaffen, was wir im Schema Attribut @SequenceGenerator verwendet

Anmerkung
+0

angeblich in Version 5.x behoben: https://hibernate.atlassian.net/browse/HHH-7232?focusedCommentId=74395&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-74395 –

4

Meine Abhilfe sieht wie folgt aus (JPA 2.1, Hibernate 4.3.8.Final, PostgreSQL 9.4):

@SequenceGenerator(name = "seq_name", sequenceName = "my_schema.seq_name", schema = "my_schema", allocationSize = 1, initialValue = 1) 
Verwandte Themen