0

いくつかの単体テストを開発しましたが、すべてのSQLステートメントで失敗しました。このログと構成を確認してください。

2012年7月1日16:33:05org.glassfish.persistence.common.Java2DBProcessorHelperexecuteDDLs警告:PER01000:SQLException実行ステートメント "CREATE TABLE CAR(ID BIGINT NOT NULL、BRAND VARCHAR(255)NOT NULL、DESCRIPTION VARCHAR(255 )、FUEL VARCHAR(255)NOT NU \ LL、GEARBOX VARCHAR(255)NOT NULL、KILOMETERS INTEGER NOT NULL、MODEL VARCHAR(255)NOT NULL、PRICE INTEGER NOT NULL、TYPE VARCHAR(255)NOT NULL、YEAR INTEGER NOT NULL 、EQUIPM \ ENT_ID BIGINT、SECURITY_ID BIGINT、PRIMARY KEY(ID)) ":java.sql.SQLSyntaxErrorException:構文エラー:行1、列263で"YEAR"が発生しました。2012年7月1日16:33:05org.glassfish .persistence.common.Java2DBProcessorHelper executeDDLs警告:PER01000:SQLException実行ステートメント "CREATE TABLE VEHICLE(ID BIGINT NOT NULL、MAKE VARCHAR(255)NOT NULL、MODEL VARCHAR(255)NOT NULL、TRIM VARCHAR(255)\ NOT NULL、YEAR INTEGER NOT NULL、PRIMARY KEY(ID)) ":java.sql.SQLSyntaxErrorException:構文エラー:1行100列で"TRIM"が発生しました。 2012年7月1日16:33:06org.glassfish.persistence.common.Java2DBProcessorHelperexecuteDDLs警告:PER01000:SQLException実行ステートメント "ALTER TABLE CAR ADD CONSTRAINT FK_CAR_SECURITY_ID FOREIGN KEY(SECURITY_ID)REFERENCES SECURITY(ID)":java.sql .SQLSy \ ntaxErrorException:'ALTER TABLE'は存在しないため、'CAR'では実行できません。2012年7月1日16:33:06org.glassfish.persistence.common.Java2DBProcessorHelper executeDDLs警告:PER01000:SQLException実行ステートメントを取得しました「」ALTER TABLE CAR ADD CONSTRAINT CAR_EQUIPMENT_ID FOREIGN KEY(EQUIPMENT_ID)REFERENCES EQUIPMENT(ID) ":java.sql.SQLSy \ ntaxErrorException:'ALTER TABLE'は存在しないため、'CAR'では実行できません。2012年7月1日4:33 :06 PM com.sun.ejb.containers.BaseContainer initializeHome INFO:EJB5181:EJB VehicleEJBのポータブルJNDI名:[java:global / classes / VehicleEJB!com.thevehiclelist.VehicleEJB、java:global / classes / VehicleEJB] Jul 01、 2012 4:33:06 PM com.sun.ejb.containers.BaseContainer initializeHome INFO:EJB5181:EJB BookEJBのポータブルJNDI名:[java:global / classes / BookEJB!se.while_se.BookEJB、java:global / classes / BookEJB ]2012年7月1日16:33:06com.sun.ejb.containers.BaseContainerinitializeHome情報:EJB5181:EJB CarEJBのポータブルJNDI名:[java:global / classes / CarEJB、java:global / classes / CarEJB!se.while_se.CarEJB]2012年7月1日16:33:07org.eclipse.persistence.session.file:/tmp/gfembed468260415984552053tmp/applications/classes/_carcmsPU警告:ローカル例外スタック:例外[ EclipseLink-4002](Eclipse Persistence Services-2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseException内部例外:java.sql.SQLSyntaxErrorException:構文エラー:1行39列で「TRIM」が発生しました。エラーコード:20000呼び出し:INSERT INTO VEHICLE(ID、MAKE、MODEL、TRIM、YEAR)VALUES(?、?、?、?、?)bind => [5つのパラメーターがバインドされています]クエリ:InsertObjectQuery(Vehicle [id = 1、 year = 2007、make = Volvo、model = V70、trim = 2.4D])org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)atorg.eclipse.persistence.internal。databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644)at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession。 java:1717)org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253)at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)at org.eclipse .persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.insertObject(DatasourceCallQueryMechanism.java:342)atorg.eclipse.persistence.internal。org.eclipse.persistence.internal.queries.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:177)のquerys.StatementQueryMechanism.insertObject(StatementQueryMechanism.java:162)org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism。 java:472)at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)at org.eclipse.persistence.internal .queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:287)at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)atorg.eclipse.persistence.queries.DatabaseQuery。execute(DatabaseQuery.java:844)at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:743)at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)at org.eclipse .persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)executeInUnitOfWork(ObjectLevelModifyQuery.java:85)at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)executeInUnitOfWork(ObjectLevelModifyQuery.java:85)at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)

私の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

2

最初のエラーは、YEARという列を作成しようとしたが、YEARはDerbyで予約語であるということです。別の列名を選択する必要があります。2つ目は、予約語であるTRIM列を作成しようとすることです。ここでも別の列名を選択します。

私が見ることができることから、残りのエラーは最初のテーブルの作成中の失敗によって引き起こされていることがわかります。

最初にテーブルを手動で作成し、IDEを使用して対応する永続クラスを作成する方が簡単でエラーが少ない可能性があります(Netbeansを使用すると非常に簡単になり、他のIDEにも同等の機能があると思います)。

もう1つ、255文字幅のvarchar列が自動的に作成されないようにするために、注釈に必要な長さを追加できます。そこで、データベースの列名を修正することもできます。たとえば、データベースではinteriortrimと呼ばれる32文字幅のnullではない列を使用しますが、コードではトリムします。

@Column(name = "INTERIORTRIM", nullable = false, length=32)
private String trim;
于 2012-07-01T14:52:33.273 に答える