2

Derby の内部データベースに接続しようとして、いくつかの単体テストを開発しましたが、次の結果が得られました。

警告: ローカル例外スタック: 例外 [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException 内部例外: java.sql.SQLSyntaxErrorException: テーブル/ビュー 'SEQUENCE'存在しません。エラー コード: 20000 呼び出し: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [バインドされた 2 つのパラメーター] クエリ: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?") at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java :333) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644) で org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348) の intercept(BaseContainer.java:5360) com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214) の com.sun .ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) at $Proxy113.createVehicle(Unknown Source) at com.thevehiclelist.__EJB31_Generated_ VehicleEJB _Intf_ Bean103) org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74) で 原因: java.sql.SQLSyntaxErrorException: テーブル/ビュー 'SEQUENCE' が存在しません。org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException (未知のソース) で org.apache.derby.impl.jdbc.Util.generateCsSQLException (未知のソース) で org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException (ソース不明) org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException (ソース不明) org.apache.derby.impl.jdbc.EmbedConnection.handleException (ソース不明) org.apache.derby.impl.jdbc org.apache.derby.impl.jdbc.EmbedPreparedStatement の .ConnectionChild.handleException (不明なソース)。org.apache.derby.impl.jdbc.EmbedPreparedStatement20 の (不明なソース)。org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1474) の ConnectionWrapper40.prepareStatement(ConnectionWrapper40.java:173) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java: 1423) org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:697) で org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585) ... 86 以上の原因by: java.sql.SQLException: テーブル/ビュー 'SEQUENCE' が存在しません。org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(不明なソース) で org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(不明なソース) で ... 108 以上 原因: エラー 42X05: テーブル/ビュー 'SEQUENCE' が存在しません。org.apache.derby.iapi.error.StandardException.newException (不明なソース) で org.apache.derby.impl.sql.compile.FromBaseTable.bindTableDescriptor (不明なソース) で org.apache.derby.impl.sql.compile org.apache.derby.impl.sql.compile.FromList.bindTables(不明なソース) の .FromBaseTable.bindNonVTITables(不明なソース) org.apache.derby.impl.sql.compile.SelectNode.bindNonVTITables(不明なソース) org .apache.derby.impl.sql.compile.DMLStatementNode.bindTables(不明なソース) org.apache.derby.impl.sql.compile.UpdateNode.bindStatement(不明なソース) org.apache.derby.impl.sql.GenericStatement org.apache.derby.impl.sql.GenericStatement.prepare (不明なソース) の org.apache.derby.impl.sql.conn の .prepMinion (不明なソース)。

私のpersistence.xmlは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="carcmsPU" transaction-type="JTA">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <jta-data-source>jdbc/__default</jta-data-source>

        <class>se.while_se.Book</class>
        <class>se.while_se.Car</class>
        <class>com.thevehiclelist.Vehicle</class>



        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:derby:MyTestDb;create=true" />
            <property name="javax.persistence.jdbc.user" value="" />
            <property name="javax.persistence.jdbc.password" value="" />
            <!-- <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> -->

        </properties>
    </persistence-unit>
</persistence>

そして、私の pom.xml はこれです:

<dependencies>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.8.1</version>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>org.eclipse.persistence</groupId>
                    <artifactId>javax.persistence</artifactId>
                    <version>2.0.0</version>
                </dependency>
                <dependency>
                    <groupId>org.eclipse.persistence</groupId>
                    <artifactId>eclipselink</artifactId>
                    <version>2.3.2</version>
                </dependency>
                <dependency>
                    <groupId>org.glassfish.main.extras</groupId>
                    <artifactId>glassfish-embedded-all</artifactId>
                    <version>3.1.2</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.apache.derby</groupId>
                    <artifactId>derby</artifactId>
                    <version>10.8.2.2</version>
                    <scope>provided</scope>
                </dependency>

            </dependencies>

データベースが内部データベースに作成されていないように見えますか、それとも何か不足していますか?

よろしくお願いします

4

1 に答える 1

3

以下はコメントアウト。その結果、テーブルやその他のデータベース オブジェクト (シーケンスなど) が作成されないことが予想されます。

<!-- <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> -->

コメントを削除するだけで問題なく動作するはずです:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> 

追加の注意として、create=trueJDBC 接続文字列を使用してもこれには影響しません。データベース自体を作成するだけで、テーブルやその他のオブジェクトは作成しません。

于 2012-07-01T13:26:53.650 に答える