@GenerateValue -strategy = GenerationType.TABLE的JPA问题

时间:2013-09-08 04:34:33

标签: jpa openjpa

我使用下面的注释来实现JPA 1中的Sequence但是出错了。 代码:

@TableGenerator(name="tab1", initialValue=1, allocationSize=100
//using above annotation on entity class

@Id
@GeneratedValue(strategy=GenerationType.TABLE, generator="tab1")
private Integer id;

数据库:Oracle

错误:

尝试更新序列表“OPENJPA_SEQUENCES_TABLE”失败。通常在任何数据存储区标识类上运行mappingtool的刷新操作时会创建序列表。如果您尚未运行mappingtool但想要创建序列表,请运行: java org.apache.openjpa.jdbc.kernel.TableJDBCSeq -action add

2 个答案:

答案 0 :(得分:0)

似乎表“OPENJPA_SEQUENCES_TABLE”根本不存在,错误消息建议:

  1. 在控制台中创建运行命令java org.apache.openjpa.jdbc.kernel.TableJDBCSeq -action add的表。查看一些详细信息here
  2. 或使用类似here所述的映射工具。
  3. 或者,您可以尝试从oracle控制台手动创建表。
  4. 如果选择1或2,则只需在数据库中检查表格是否已生成。

答案 1 :(得分:0)

你应该这样做:

@Id
@TableGenerator(name = "Irakli_GEN",
        table = "SEQUENCES",
        pkColumnName = "SEQ_NAME",
        valueColumnName = "SEQ_NUMBER",
        pkColumnValue = "CLIENTS_SEQ",
        allocationSize = 1)
@GeneratedValue(strategy = GenerationType.TABLE, generator = "Irakli_GEN")

它应该自动创建表SEQUENCES - 并在其中创建序列。我将这个代码用于我的实体,它可以工作。