Java Hibernate继承的问题。使用错误序列的子类
下面是我的映射 这是所有类的基类。这个班没有桌子。所有子类都将用户id作为其主键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; } } 注释类,它有自己的表
@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不喜欢它。我想它会覆盖超类中的序列。