2

事实证明,以下示例在使用 mysql 5.x 时有效,但在使用 oracle 10g 数据库时无效。

有没有办法定义一个独立于数据库技术的唯一标识符字段?

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

我已经在休眠中对此进行了测试,只有在使用 Oracle 时才会出现以下异常:

org.hibernate.MappingException: Dialect does not support identity key generation
4

2 回答 2

4

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

使用表生成标识符的最简单方法是指定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

于 2010-08-04T15:44:41.567 回答
0

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

于 2010-08-07T14:15:42.157 回答