2012-03-26 7 views
2

Ich habe eine Entitätsklasse mit der folgenden Annotation für den Primärschlüssel: @GeneratedValue(strategy = GenerationType.AUTO). Allerdings, wenn ich zu persist eine Instanz dieser Klasse versuchen, erhalte ichOpenJPA 1 - Sequenztabelle wird nicht erstellt

com.microsoft.sqlserver.jdbc.SQLServerException: Ungültige Objektnamen ‚OPENJPA_SEQUENCE_TABLE‘. bei com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError (SQLServerException.java:197)

Die Tabelle für es sieht auf jeden Fall nicht in der Datenbank nicht vorhanden ist. Der Benutzer, mit dem die Verbindung zur Datenbank hergestellt wird, kann Tabellen erstellen. Sollte es OPENJPA_SEQUENCE_TABLE automatisch erstellen, oder muss ich das tun? Wenn ja, wie sieht das Tabellenschema aus? Ich benutze openjpa-1.2.2.jar.

Edit: ich main()'s JavaDoc sah, da es eine Option, die Sequenztabelle auf der Kommandozeile hinzufügen, aber org.apache.openjpa.jdbc.schema.TableJDBCSequence existiert nicht in openjpa-1.2.2.jar. org.apache.openjpa.jdbc.schema tut, aber TableJDBCSequence ist nicht drin.

Antwort

5

Standardmäßig erstellt OpenJPA keine der Tabellen (einschließlich der Sequenztabelle) automatisch, es sei denn, Sie haben die Eigenschaft SynchronizeMappings in Ihrer Datei persistence.xml aktiviert. Dies ist jedoch wirklich nur gut für Debugging-Zwecke, da ich denke, dass es die Datenbank jedes Mal setzt die Anwendung startet:

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

Sie auch den OpenJPA MappingTool von der Befehlszeile verwenden kann, um das Schema-Skript zu generieren:

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

Weitere Informationen über das Mapping Tool und Runtime-vorwärts-Mapping ist hier verfügbar: http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_mapping.html#ref_guide_ddl_examples

Ihre letzte Option ist nur manuell die Tabelle zu erstellen. Hier ist das Skript für Oracle; Sie können sich wahrscheinlich um es zu SQL Server konvertieren ziemlich leicht:

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

Das ist eine ungültige Oracle DDL. Oracle unterstützt TINYINT oder BIGINT nicht, nur NUMBER. CREATE TABLE openjpa_sequence_table (ID NUMMER (4) NOT NULL, SEQUENCE_VALUE NUMMER (20) Standard NULL, PRIMARY KEY (ID)); –

0

In meinem Fall die GenerationType.AUTO in GenerationType.IDENTITY ändert das Problem gelöst. Natürlich ist dies nur eine Lösung, wenn Sie die Entität ändern können.

Verwandte Themen