1

我正在尝试使用 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。

任何人都知道我怎么能得到它?当然,我可以手动指定它,但我希望它尽可能自动化。

谢谢。

4

3 回答 3

2

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

2.2.4.1。每班表

这种策略有很多缺点(尤其是多态查询和关联),在 JPA 规范、Hibernate 参考文档、Hibernate in Action 和许多其他地方都有解释。Hibernate 解决了大多数使用 SQL UNION 查询实现此策略的问题。它通常用于继承层次结构的顶层:

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

此策略支持一对多关联,前提是它们是双向的。此策略不支持 IDENTITY 生成器策略:id 必须在多个表之间共享。因此,在使用此策略时,您不应使用 AUTO 或 IDENTITY

于 2010-07-27T21:15:18.057 回答
0

请注意,GenerationType.AUTO 表示由持久化提供者选择生成策略,您是否尝试过更具体的值?

于 2010-07-27T15:36:32.220 回答
0

为了记录,这家伙问如何使用 JPA 2 注释自动增加他的 id 列。

伙计,只需在您的 @GeneratedValue 注释上声明 strategy=GenerationType.IDENTITY 。例如:

@Id  
@GeneratedValue(strategy=GenerationType.IDENTITY)  

长期保护任何地方;

希望这会帮助你。

于 2011-01-02T09:17:14.927 回答