OpenJPA 1 - 未创建序列表

时间:2012-03-26 14:56:23

标签: java sql-server jpa sql-server-2008-r2 openjpa

我有一个实体类,主键上有以下注释:@GeneratedValue(strategy = GenerationType.AUTO)。但是,当我尝试persist这个类的实例时,我得到了

  

com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称“OPENJPA_SEQUENCE_TABLE”。       在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)

它正在寻找的表肯定不存在于数据库中。连接到数据库的用户可以创建表。它应该自动创建OPENJPA_SEQUENCE_TABLE,还是我必须这样做?如果是这样,它所期望的表架构是什么?我正在使用openjpa-1.2.2.jar。

编辑:我查看了main()'s JavaDoc,因为它可以选择在命令行中添加序列表,但openjpa-1.2.2中不存在org.apache.openjpa.jdbc.schema.TableJDBCSequence 。罐。 org.apache.openjpa.jdbc.schema可以,但TableJDBCSequence不在其中。

2 个答案:

答案 0 :(得分:5)

默认情况下,除非您在persistence.xml中启用了SynchronizeMappings属性,否则OpenJPA不会自动创建任何表(包括序列表)。但是,这实际上只适用于调试目的,因为我认为每次应用程序启动时它都会重置数据库:

<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>

您还可以使用命令行中的OpenJPA MappingTool生成架构脚本:

java org.apache.openjpa.jdbc.meta.MappingTool -action buildSchema -foreignKeys true

有关映射工具和运行时转发映射的更多信息,请访问:http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_mapping.html#ref_guide_ddl_examples

您的最后一个选择是手动创建表格。这是Oracle的脚本;你可以很容易地将它转换为SQL Server:

CREATE TABLE openjpa_sequence_table (ID tinyint(4) NOT NULL, SEQUENCE_VALUE bigint(20) default NULL, PRIMARY KEY (ID)) 

答案 1 :(得分:0)

在我的情况下,将GenerationType.AUTO更改为GenerationType.IDENTITY解决了这个问题。当然,如果你能改变实体,这只是一个解决方案。