2010-04-09 25 views
12

Tengo el siguiente código:parámetro esquema de hibernación no funciona en @SequenceGenerator anotación

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

} 

Base de datos: PostgreSQL 8.4, Hibernate 3.5.0 anotaciones de final.

Al guardar el objeto de MiClase genera la siguiente consulta SQL:

select nextval('my_table_id_seq') 

lo que no hay prefijo de esquema y, por tanto, la secuencia no se puede encontrar. Cuando escribo el sequenceName como

sequenceName = "my_schema.my_table_id_seq" 

todo funciona.

¿Tengo malentendidos por el significado del parámetro de esquema o es un error? ¿Alguna idea de cómo hacer que el parámetro de esquema funcione?

+0

yo tenía el mismo problema aquí y poner el esquema en el nombre de la secuencia, como lo hizo. My @SequenceGenerator no tiene una propiedad de esquema. – BrunoJCM

Respuesta

0

Hmmm, no trabajo con la parte interna de hibernación mucho, pero hay algo de información aquí:

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

También puede establecer el esquema predeterminado para un usuario que se conecta a través de PostgreSQL MODIFICAR USUARIO. .. SET SEARCH_PATH

1

Esto suena como un error: el proveedor de JPA debe respetar los atributos "nuevos" (desde Java Persistence 2.0) schema y catalog de la anotación @SequenceGenerator. Sugiero subir el a Jira issue (las anotaciones y los proyectos del administrador de entidades ahora están en el núcleo), no pude encontrar ninguno.

-5

Hola yo estaba teniendo el mismo problema

pero Fija tu hibernate.hbm2ddl.auto para actualizar y ejecutar.

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

Sé que es una forma después del hecho, pero esta respuesta es incorrecta porque simplemente crearía el generador en el esquema predeterminado, que podría no estar donde usted lo desea. – Jim

6

El mismo problema aquí, parece un error para mí. Estoy 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-size atributos, pero no veo ninguna referencia a catalog o schema

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

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

o buildTableGeneratorAnnotation que tiene

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

Por lo tanto, incluso si es un poco hackish, el camino -por lo menos para esta versión- parece estar prefijando el sequenceName como usted dice.

0

Intente mover la anotación SequenceGenerator de la declaración de clase de POJO a id declaración de campo. Con Hibernate 3.6.4 esta

@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 esto para MySQL

create table my_schema.my_table_id_seq (
    next_val bigint 
); 

insert into my_schema.my_table_id_seq values (1); 

y esto por PostgreSQL

create sequence my_schema.my_table_id_seq start 1 increment 50; 
1

mismo problema, usando Hibernate 4.3.6.Final, con Spring 4.1.4.RELEASE, en la versión 11.2.0.1.0 de Oracle Database 11g Enterprise Edition.

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

nos alrededor del problema creando un sinónimo en el esquema A que apunta a la secuencia en el esquema B. Este era sinónimo de lo que usamos en el atributo de esquema de @SequenceGenerator anotación

+0

presuntamente reparado en la versión 5.x: https://hibernate.atlassian.net/browse/HHH-7232?focusedCommentId=74395&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-74395 –

4

Mi solución tiene este aspecto (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) 
Cuestiones relacionadas