Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以base=1映射的Hibernate IndexColumn中的值0_Java_Hibernate_Generics_One To Many_Mappedsuperclass - Fatal编程技术网

Java 以base=1映射的Hibernate IndexColumn中的值0

Java 以base=1映射的Hibernate IndexColumn中的值0,java,hibernate,generics,one-to-many,mappedsuperclass,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有关 请注意,代码相当复杂,因为还涉及继承 以下是课程的相关

我们正在对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;
}
//一侧的超类
@映射超类
公共抽象类AbstractRehing
{
@OneToMany(级联=级联类型.ALL)
@级联(
{
org.hibernate.annotations.CascadeType.ALL,
org.hibernate.annotations.CascadeType.DELETE\u孤儿
})
@JoinColumn(name=“parent\u id”,nullable=false)
@IndexColumn(name=“position”,base=1,nullable=false)
私有列表元素=新的ArrayList();
}
//多面超类
@映射超类
公共抽象类AbstractReihungElement扩展了AbstractDbObject
{
@许多酮
@JoinColumn(name=“parent\u id”,insertable=false,updateable=false,nullable=false)
私人家长;
@列(name=“position”,insertable=false,updateable=false,nullable=false)
私人职位;
}

实际的类继承自这些类,并为类型参数提供具体的类。它们被映射为实体。它们还指定id和版本列以及大量其他属性和引用,但与手头的映射无关。

我知道已经快两年了,但我在为同一问题寻找解决方案时偶然发现了这一点。我们通过xml文件使用hbm,所以我不确定这是否有帮助。 在我们的例子中,问题是反向映射。如果对列表(和索引)的控制在列表元素端(“多”),就像您的例子一样,我们就遇到了问题。把它移上去解决了这个问题。我不知道注释是如何做到这一点的


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

我接受了答案,因为它回答了问题。我无法再验证它是否真的解释了我们所遇到的问题。嗨,Jens,Andre,我面临着与你描述的相同的情况,最后你找到了这个问题是如何发生的,或者你找到了解决方案吗?嗨,Jens,我面临着与你描述的相同的情况,最后你找到了这个问题是如何发生的,或者你找到解决方案了吗?这是我的代码,我从来没有发现过比这个问题和评论中描述的更多的东西。