Hibernate 使用JPA2注释将子类主键设置为自动增量
我正在尝试使用hbm2ddl为我的项目生成一个数据库模式。我使用JPA2注释来指定模式的外观。现在我对继承的id有一些问题 我有一个抽象超类,我们称之为抽象超类,它如下所示:Hibernate 使用JPA2注释将子类主键设置为自动增量,hibernate,inheritance,jpa,orm,jpa-2.0,Hibernate,Inheritance,Jpa,Orm,Jpa 2.0,我正在尝试使用hbm2ddl为我的项目生成一个数据库模式。我使用JPA2注释来指定模式的外观。现在我对继承的id有一些问题 我有一个抽象超类,我们称之为抽象超类,它如下所示: @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public abstract class AbstractSuperClass { ... @Id @GeneratedValue(strategy=GenerationT
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractSuperClass {
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
}
...
}
我已经将id设置为自动生成的值,该值转换为SQL的自动增量约束。但是,当我查看生成的脚本时,我没有看到子类表的id列中有自动递增的值
有人知道我怎么能做到吗?当然,我可以手动指定它,但我希望它尽可能自动化
谢谢。请注意,GenerationType.AUTO意味着由持久性提供程序选择生成策略,您是否尝试了更具体的值?不受支持,如有关继承映射部分的参考文档中所述: 这种策略有许多缺点(尤其是。 使用多态查询和 协会)在JPA中解释 规范,Hibernate参考 文档,Hibernate正在运行, 还有很多其他地方。冬眠工作 他们中的大多数人都在实施这一计划 使用SQL联合查询的策略。信息技术 通常用于 继承层次结构:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable { ... }
此策略支持一对多
协会,前提是
双向的此策略确实有效
不支持标识生成器
策略:必须共享id
隔着几张桌子。因此,,
使用此策略时,您应该
不使用自动或标识
记录在案,这个家伙在问如何使用JPA2注释自动增加他的id列 伙计,在@GeneratedValue注释上声明strategy=GenerationType.IDENTITY。 e、 g: 受保护的长任意点
希望这能对您有所帮助。我不知道如何回复答案,但谢谢;我错过了那部分。我想知道为什么这个策略不支持汽车。我不明白为什么每个类都有自己的表时,id必须在多个>表之间共享?你应该能够对答案进行注释,但你没有,这就是为什么我没有注意到你的问题:)假设你有两个子类B和C,并且你想通过id找到A(例如1)。如果B和C都有id=1的记录,那么谁是“正确的”记录?没有答案。这就是为什么在使用“每类表”策略时,每个表中标识列的值必须是互斥的,这就是为什么不支持标识(以及默认为标识的自动)。
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)