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
Hibernate 使用JPA2注释将子类主键设置为自动增量_Hibernate_Inheritance_Jpa_Orm_Jpa 2.0 - Fatal编程技术网

Hibernate 使用JPA2注释将子类主键设置为自动增量

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

我正在尝试使用hbm2ddl为我的项目生成一个数据库模式。我使用JPA2注释来指定模式的外观。现在我对继承的id有一些问题

我有一个抽象超类,我们称之为抽象超类,它如下所示:

@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)