Tengo el siguiente código:

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

}

De la base de datos: Postgresql 8.4, Hibernate annotations 3.5.0-Final.

Al guardar el objeto de Miclase se genera la siguiente consulta SQL:

select nextval('my_table_id_seq')

Así que no hay prefijo de esquema y, por tanto, la secuencia no puede ser encontrado. Cuando escribo el sequenceName como

sequenceName = "my_schema.my_table_id_seq"

todo funciona.

Tengo malentendidos significado de parámetro de esquema o es un bug? Alguna idea de cómo hacer parámetro de esquema de trabajo?

Yo tenía el mismo problema aquí y poner el esquema en el nombre de la secuencia, como lo hizo. Mi @SequenceGenerator no tiene un esquema de propiedad.

OriginalEl autor tabdulin | 2010-04-09

8 Comentarios

  1. 7

    Mismo problema, se ve como un error para mí. Im usando hibernate 3.6.7
    Mirando el código fuente veo un método org.hibernate.cfg.annotations.reflection.JPAOverridenAnnotationReader#buildSequenceGeneratorAnnotation(Element element) que parece copiar los valores de name, sequence-name, initial-value y allocation-sizeatributos, pero no veo ninguna referencia a catalogo schema

    yo esperaba ver algo análogo al método getTable(Element tree, XMLContext.Default defaults) (de la misma clase) que ha

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

    o buildTableGeneratorAnnotation que ha

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

    Así que, incluso si un poco de hackish, la manera -para esta versión, al menos, parece ser el prefijo de la sequenceName como usted dice.

    OriginalEl autor jambriz

  2. 5

    Mi solución se parece a esto (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)

    OriginalEl autor Vlad

  3. 1

    Mismo problema, usando Hibernate 4.3.6.Final, con la Primavera 4.1.4.La LIBERACIÓN, por parte de Oracle Database 11g Enterprise Edition Versión 11.2.0.1.0.

    Parece que es un bug => https://hibernate.atlassian.net/browse/HHH-7232

    Tenemos en torno a la cuestión mediante la creación de un sinónimo en Un esquema que apunta a la secuencia en el esquema B. Este sinónimo fue lo que se utilizó en el esquema atributo de @SequenceGenerator anotación

    supuestamente corregido en la versión 5.x: hibernate.atlassian.net/browse/…

    OriginalEl autor johnm

  4. 1

    He resuelto este problema en postgresql 9.6 por sólo añadir mi esquema antes de que el nombre de la secuencia, como este:

    (before) sequence name: seq_area_tematica
    (after) sequence name: sisbp.seq_area_tematica

    Y de sus obras. Ver el código:

    @Id
    @Column(name="seq_area_tematica")
    @GeneratedValue(generator="sequence",strategy=GenerationType.SEQUENCE) 
    @SequenceGenerator(name="sequence",sequenceName="sisbp.seq_area_tematica")
    private Long id;

    Ver el «sisbp» antes de la sequenceName. El sequenceName fue «seq_area_tematica» y ahora es «sisbp» (esquema) + «seq_area_tematica».

    OriginalEl autor WMS

  5. 0

    Trate de mover el SequenceGenerator anotación de la POJO de la declaración de clase para id declaración de campo. Con Hibernate 3.6.4 este

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

    produce esta para MySQL

    create table my_schema.my_table_id_seq (
         next_val bigint 
    );
    
    insert into my_schema.my_table_id_seq values ( 1 );

    y esta para PostgreSQL

    create sequence my_schema.my_table_id_seq start 1 increment 50;

    OriginalEl autor buzz3791

  6. -5

    Hola yo tenía el mismo problema

    pero el conjunto de su hibernación.hbm2ddl.auto para actualizar y ejecutar.

    <property name="hibernate.hbm2ddl.auto">update</property>
    Sé que es camino después del hecho, pero esta respuesta no es correcta porque se acaba de crear el generador en el esquema predeterminado, que puede no ser donde usted lo desee.

    OriginalEl autor ulima69

Dejar respuesta

Please enter your comment!
Please enter your name here