Pregunta

Estamos utilizando Hibernate Anotaciones 3.4.0GA y Hibernate Core 3.3.2.GA (también conocido como las versiones actuales estables) contra una base de datos Oracle

Tenemos un mapeo uno a varios con base = 1 que funcionaba bien para un muuuucho tiempo, sin embargo, la semana pasada hemos encontrado 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 relacionadas con los medicamentos genéricos de uso o MappedSuperclass.

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

Las siguientes son las piezas relevantes 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. Ellos se asignan como Entidad. También especifican columnas ID y versión, así como toneladas de otros atributos y referencias, pero nada relacionado con la asignación en cuestión.

¿Fue útil?

Solución

Yo sé que ha sido casi dos años, pero me encontré con este mientras se busca una solución para el mismo problema. Estamos utilizando HBM a través de archivos XML, así que estoy muy seguro de si esto ayuda. En nuestro caso el problema fue el mapeo inverso. Si el control de la lista (y el índice) estaba en el lado lista de elementos (los "muchos") como en su caso, teníamos el problema. Moviéndola hacia arriba resuelto este. No sé cómo se hace esto con anotaciones.

Otra fuente de error puede ser si Acctually establecer "elementos" en su objeto AbstractReihung. Hibernate utiliza objetos proxy para propiedades cargadas perezosas. Si se establece una colección totalmente nueva en lugar de modifing la existente se sobrescribe el objeto proxy.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top