我有一个实体类,主键上有以下注释:@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
不在其中。
答案 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解决了这个问题。当然,如果你能改变实体,这只是一个解决方案。