java - Hibernate IndexColumn 中 0 的值映射为 base=1

标签 java hibernate generics one-to-many mappedsuperclass

我们正在对 Oracle 数据库使用 Hibernate Annotations 3.4.0GA 和 Hibernate Core 3.3.2.GA(也称为当前稳定版本)

我们有一个 base=1 的一对多映射,它在很长一段时间内工作正常,但上周我们在数据库中发现一些条目,其中索引列包含值 0,这导致了各种问题。

所以我的问题是:有人知道在一对多关系的索引列中使用 base=1 映射时将值 0 放入其中的方法吗?可能与使用泛型或 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,所以我不太确定这是否有帮助。 在我们的例子中,问题是反向映射。如果对列表(和索引)的控制是在列表元素端(“许多”),就像您的情况一样,我们遇到了问题。向上移动解决了这个问题。不知道这是如何用注释完成的。

错误的另一个来源可能是您在 AbstractReihung 对象上设置了“元素”。 Hibernate 使用代理对象来延迟加载属性。如果您设置一个全新的集合而不是修改现有的集合,则会覆盖代理对象。

关于java - Hibernate IndexColumn 中 0 的值映射为 base=1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370169/

相关文章:

java - 通用 Hibernate DAO

java - 在 OneToMany 和 ManyToMany 映射中获取 StackOverflow

java - 列的值太长 - 错误持续存在 LocalDate

c# - 抽象类型和接口(interface)作为具有 new() 约束的通用类型参数的问题

java - 在Java中格式化具有小数位数的数字表示法而不除法的正确方法

java - TemporalAdjuster - 从调整后的日期获取下一个日期

java - 为什么即使对象被向上转换,Java 也会调用重写的方法?

java - Android Java 返回类型错误

c# - 可能返回数组的通用属性是否可以接受?

c++ - 确定枚举类中枚举的数量(或任何枚举类中的特定枚举值)