2

JPA プロバイダーとして Eclipselink を使用し、組み込み Apache Derby データベースを使用しています。プロジェクトを実行すると、次のような例外が発生します。

内部例外: java.sql.SQLSyntaxErrorException: 構文エラー: 行 1、列 31 で「NOT」が発生しました。

エラーコード: -1

呼び出し: CREATE TABLE ITEM (ID VARCHAR NOT NULL, CODE VARCHAR, EXCLUSIVETAX NUMBER(10,5), NAME VARCHAR, UNITPRICE NUMBER(10,5), PRIMARY KEY (ID))

クエリ: DataModifyQuery(sql="CREATE TABLE ITEM (ID VARCHAR NOT NULL, CODE VARCHAR, EXCLUSIVETAX NUMBER(10,5), NAME VARCHAR, UNITPRICE NUMBER(10,5), PRIMARY KEY (ID))")

[EL 警告]: 2013-03-06 18:04:41.827--ServerSession(1650627452)--例外 [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions .DatabaseException

内部例外: java.sql.SQLSyntaxErrorException: 構文エラー: 行 1、列 71 で "(" が発生しました。

エラーコード: -1

呼び出し: CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT NUMBER(19), PRIMARY KEY (SEQ_NAME))

クエリ: DataModifyQuery(sql="CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT NUMBER(19), PRIMARY KEY (SEQ_NAME))")

[EL 情報]: 2013-03-06 18:04:41.856--ServerSession(1650627452)--トランザクション外で読み取りクエリを実行しようとしたときに通信障害が検出されました。クエリを再試行しています。エラー: 例外 [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException

persistence.xml は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
  <persistence-unit name="StockKeeperPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.mycompany.entities.stock.Item</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby:sampledb;create=true"/>
      <property name="javax.persistence.jdbc.password" value="app"/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
      <property name="javax.persistence.jdbc.user" value="app"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>

ここで何が問題なのですか?NOTその声明では許可されていませんか?許可されていない場合、クエリがそのように構成されているのはなぜですか?

4

2 に答える 2

3

これは、Eclipse Link がデータベースを認識せずにクエリを生成し、ほとんどの DBMS に共通のクエリを生成するために発生します。しかし、@Bryan が言ったように、Derby には NUMBER データ型がありません。

これを回避するには、これを に追加して、使用しているデータベースを指定する必要がありますpersistance.xml

  <property name="eclipselink.target-database" value="Derby"/>

プラットフォームクラス名も追加します

<property name="eclipselink.platform.class.name" value="org.eclipse.persistence.platform.database.DerbyPlatform"/>
于 2013-03-14T06:20:47.423 に答える
1

Derby には NUMBER データ型がありません。Derby のデータ型は次のとおりです: http://db.apache.org/derby/docs/10.9/ref/crefsqlj31068.html#crefsqlj31068

おそらく、必要なのは NUMBER ではなく DECIMAL です。

于 2013-03-06T14:42:14.523 に答える