使用JPA 2注释将子类主键设置为auto_increment

时间:2010-07-27 15:05:48

标签: hibernate inheritance jpa orm jpa-2.0

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

我有一个抽象的超类,我们称之为AbstractSuperClass,它看起来像这样:

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class AbstractSuperClass {
    ...
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
    }
    ...
}

我已将id设置为自动生成的值,该值转换为SQL的auto_increment约束。但是当我查看生成的脚本时,我没有看到子类表的id列中包含auto_increment。

任何人都知道如何才能做到这一点?当然我可以手动指定它,但我希望它尽可能自动化。

感谢。

3 个答案:

答案 0 :(得分:2)

不支持,如参考文档中有关继承映射的部分所述:

  

2.2.4.1. Table per class

     

这种策略有许多缺点(尤其是   多态查询和   协会)在JPA中解释   spec,Hibernate参考   文档,Hibernate in Action,   和许多其他地方。 Hibernate的工作   他们中的大多数人实施这一点   使用SQL UNION查询的策略。它   通常用于顶级   继承层次结构:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Flight implements Serializable { ... }            
     

此策略支持一对多   协会规定他们是   双向的。 这个策略确实如此   不支持IDENTITY生成器   策略:必须共享id   跨几个表。所以,   在使用这种策略时,你应该这样做   不使用AUTO或IDENTITY

答案 1 :(得分:0)

请注意,GenerationType.AUTO意味着由持久性提供程序选择生成策略,您是否尝试过更具体的值?

答案 2 :(得分:0)

为了记录,这家伙正在询问如何使用JPA 2注释auto_increment他的id列。

Dude,只需在@GeneratedValue注释上声明strategy = GenerationType.IDENTITY即可。 例如:

@Id  
@GeneratedValue(strategy=GenerationType.IDENTITY)  

长期保护任何地方;

希望这会对你有所帮助。