代码之家  ›  专栏  ›  技术社区  ›  Jay

定义独立于数据库的JPA对象uid

  •  2
  • Jay  · 技术社区  · 15 年前

    事实证明,下面的示例在使用mysql 5.x时有效,但在使用oracle10g数据库时却不起作用。

    有没有一种方法可以定义独立于数据库技术的唯一标识符字段?

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id")
    private long id;
    

    org.hibernate.MappingException: Dialect does not support identity key generation
    
    2 回复  |  直到 10 年前
        1
  •  4
  •   Jordan Allan    15 年前

    使用数据库表是一种生成标识符的可移植方法。

    使用表生成标识符的最简单方法是指定 TABLE 作为发电策略:

    @Id
    @GeneratedValue(strategy=GenerationType.TABLE)
    @Column(name="id")
    private long id;
    

    如果使用模式生成,提供者将创建默认表;否则,必须指定现有表:

    @TableGenerator(name="InvTab",
        table="ID_GEN",
        pkColumnName="ID_NAME",
        valueColumnName="ID_VAL",
        pkColumnValue="INV_GEN")
    @Id 
    @GeneratedValue(generator="InvTab")
    @Column(name="id")
    private long id;
    

    http://www.oracle.com/technology/products/ias/toplink/jpa/howto/id-generation.html#table

        2
  •  0
  •   Jay    15 年前

    我研究过使用 GenerationType.AUTO 而且这似乎是更好的选择。它允许JPA实现选择最适合您使用的数据存储系统的内容。