Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate继承的问题。使用错误序列的子类_Java_Hibernate - Fatal编程技术网

Java Hibernate继承的问题。使用错误序列的子类

Java Hibernate继承的问题。使用错误序列的子类,java,hibernate,Java,Hibernate,下面是我的映射 这是所有类的基类。这个班没有桌子。所有子类都将用户id作为其主键 @MappedSuperclass public abstract class Model { private Long id; @Id @GeneratedValue(strategy=GenerationType.Sequence, generator="myGenerator") public Long getId() { return id; } } 注释类,它有自己的表

下面是我的映射

这是所有类的基类。这个班没有桌子。所有子类都将用户id作为其主键

@MappedSuperclass
public abstract class Model {
    private Long id;

    @Id
    @GeneratedValue(strategy=GenerationType.Sequence, generator="myGenerator")
    public Long getId() { return id; }
}
注释类,它有自己的表,模型中的所有字段都有列

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@Table(name = "COMMENT")
@SequenceGenerator(name="myGenerator", sequenceName="COMMENT_SEQ", allocationSize=1)
public class Comment extends Model {
    //some data
}
Comment的一个子类,它也有自己的表,Comment和Model中的所有字段都有列

@Entity
@Table(name = "ORDER_COMMENT")
@SequenceGenerator(name="myGenerator", sequenceName="ORDER_COMMENT_SEQ", allocationSize=1)
public class OrderComment extends Model {
    //some data
}
此类有自己的表,可以有一对多的订单注释

@Entity
@Table(name="ORDER")
@SequenceGenerator(name="myGenerator", sequenceName="ORDER_SEQ", allocationSize=1)
public class Order extends Model {
    private Set<OrderComment> = new HashSet<OrderComment>();

    @OneToMany
    @JoinColumn(name="ORDER_ID")
    public Set<OrderComment> getComments() { return comments; }
}
@实体
@表(name=“ORDER”)
@SequenceGenerator(name=“myGenerator”,sequenceName=“ORDER_SEQ”,allocationSize=1)
公共类秩序扩展模型{
私有集=新的HashSet();
@独身癖
@JoinColumn(name=“订单号”)
public Set getComments(){return comments;}
}
问题是,当我向订单添加新的OrderComment时,Hibernate会从注释序列而不是OrderComment序列中选择id


关于为什么会发生这种情况,以及我可以改变什么来解决这个问题,有什么想法吗?或者有更好的方法来映射它吗?

SequenceGenerator是通过名称全局标识的,因此您只能有一个名为“myGenerator”的

如果您希望在带有@GeneratedValue的全局变量上使用标识符,则需要定义单个@SequenceGenerator,并对所有表使用单个序列


或者,您可以在超类中保留一个抽象的getId方法,并在每个子类上实现它:hibernate很高兴,您将有一个统一的方法来获得您的id。

SequenceGenerator通过其名称进行全局标识,因此您只能有一个名为“myGenerator”的方法

如果您希望在带有@GeneratedValue的全局变量上使用标识符,则需要定义单个@SequenceGenerator,并对所有表使用单个序列


或者,您可以在超类中保留一个抽象的getId方法,并在每个子类上实现它:hibernate很高兴,您将有一个统一的方法来获得您的id。

我们在这里使用序列生成器来区分每个模型,因此注释是一个模型,OrderComment是一个模型,订单也是一个模型。他们应该从这个视图共享一个序列生成器


您可以将多个实体使用的单个序列生成器定义为。

我们在这里使用序列生成器来区分每个模型,因此注释是模型,订单注释是模型,订单也是模型。他们应该从这个视图共享一个序列生成器


您可以将多个实体使用的单个序列生成器定义为。

但奇怪的是,我的序列定义与hibernate的早期版本(3.3.1)完全相同,并且工作正常。Hibernate 3.6x不喜欢它。我以为它会覆盖超类中的序列,但奇怪的是,我的序列定义与hibernate的前一个版本(3.3.1)完全相同,并且工作正常。Hibernate 3.6x不喜欢它。我想它会覆盖超类中的序列。