我们使用Hibernate标注3.4.0GA和Hibernate核心3.3.2.GA(也称为当前的稳定版本)针对Oracle数据库

我们有一个一对多的映射与基地= 1,它工作得很好了过长...时间,但上周我们发现在索引列载造成的各种问题的0值的数据库中的一些条目。

所以我的问题是:的方式来获得的值为0到的一个一对多的关系索引列没有任何人知道,当它被映射用碱= 1?可能与使用泛型或MappedSuperclass。

请注意,代码是相当复杂的,因为继承介入。

以下是类的相关件:

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

实际的类从这些继承和为类型参数提供的具体类。它们被映射为实体。他们还指定id和version列以及吨的其他属性和引用,但没有涉及到手头的映射。

有帮助吗?

解决方案

我知道这是近两年,但我偶然发现了这一点的同时寻找同样的问题的解决方案。所以我不太清楚这是否会帮助我们通过XML文件中使用HBM。 在我们的情况下,问题是反向映射。如果在列表(和索引)的控制是在列表元素侧(以下简称“多”)在你的情况一样,我们有问题。动起来解决这一点。不知道这是如何与注解来实现。

有错误的另一个来源可以是,如果你acctually设定AbstractReihung对象上的“元件”。 Hibernate使用了延迟加载性能代理对象。如果你设定了一个全新的集合,而不是对矫正现有一个你覆盖代理对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top