2010-03-03 15 views
5

Estamos utilizando Hibernate Anotaciones 3.4.0GA y Hibernate Core 3.3.2.GA (también conocido como las versiones estables actuales) contra una base de datos Oraclevalor de 0 en Hibernate IndexColumn mapeada con base = 1

Tenemos una uno-a-muchos mapeo con base = 1 que funcionaba bien para un muuuucho tiempo, sin embargo, la semana pasada encontró que algunas entradas de la base de datos en la columna de índice contiene un valor de 0 lo que causó todo tipo de problemas.

Así que mi pregunta es: ¿Alguien sabe de una manera de obtener un valor de 0 en la columna de índice de una relación de uno a muchos, cuando se hace corresponder con una base = 1? Posiblemente relacionado con el uso de genéricos o MappedSuperclass.

cuenta que el código es bastante complejo, porque la herencia está implicado también.

Los siguientes son los elementos pertinentes de las clases:

// SuperClass of the One side 
@MappedSuperclass 
public abstract class AbstractReihung<Tp, Tw, Te extends AbstractReihungElement<Tp, Tw>> 
{ 
    @OneToMany(cascade = CascadeType.ALL) 
    @Cascade(
    { 
     org.hibernate.annotations.CascadeType.ALL, 
     org.hibernate.annotations.CascadeType.DELETE_ORPHAN 
    }) 
    @JoinColumn(name = "parent_id", nullable = false) 
    @IndexColumn(name = "position", base = 1, nullable = false) 
    private List<Te> elements = new ArrayList<Te>(); 
} 

// Super Class of the Many side 
@MappedSuperclass 
public abstract class AbstractReihungElement<Tp, Tw> extends AbstractDbObject 
{ 
    @ManyToOne 
    @JoinColumn(name = "parent_id", insertable = false, updatable = false, nullable = false) 
    private Tp parent; 

    @Column(name = "position", insertable = false, updatable = false, nullable = false) 
    private int position; 
} 

Las clases reales heredan de estos y proporcionan clases concretas de los parámetros de tipo. Están mapeados como Entidad. También especifican las columnas de identificación y versión, así como toneladas de otros atributos y referencias, pero nada relacionado con el mapeo en cuestión.

+0

Hola Jens, estoy enfrentando el mismo escenario que describiste, ¿al final encontraste cómo ocurre este problema, o encontraste una solución para él? Este es mi código, http: // pastebin. com/V6FRBLMe – fujy

+0

Nunca supe más sobre esto que lo que se describe en esta pregunta y comentarios. –

Respuesta

2

Sé que han pasado casi dos años, pero me encontré con esto mientras buscaba una solución para el mismo problema. Estamos utilizando hbm a través de archivos xml, por lo que no estoy seguro si esto ayudará. En nuestro caso, el problema fue el mapeo inverso. Si el control sobre la lista (y el índice) estaba en el lado del elemento de lista (los "muchos") como en su caso, tuvimos el problema. Moverlo resolvió esto. No sé cómo se hace esto con las anotaciones.

Otra fuente del error puede ser si establece "elementos" en su objeto AbstractReihung. Hibernate usa objetos proxy para propiedades cargadas perezosas. Si configura una colección completamente nueva en lugar de modificar la existente, sobrescribirá el objeto proxy.

+0

Acepté la respuesta porque responde las preguntas. No puedo verificar más que en realidad explica el problema que tuvimos. –

+0

Hola Jens, Andre, estoy frente a la misma situación que usted describe, en el último se encontró cómo ocurre este problema, o ¿Ha encontrado una solución para ello? – fujy

+0

Este es mi código, http://pastebin.com/V6FRBLMe – fujy

Cuestiones relacionadas