3

単純なJavaSwingアプリケーションでEclipseLink(2.4.0)およびsqlite3.7.2とともにJPA2.0を使用したいと思います。

私が最初に遭遇したのは、EclipseLinkがsqliteをサポートしていないということです。出力は次のとおりです。

[EL情報]:2012-09-18 18:05:42.246--ServerSession(31125695)--EclipseLink、バージョン:Eclipse PersistenceServices-2.4.0.v20120608-r11652

[EL情報]:接続:2012-09-18 18:05:42.352--ベンダー名[SQLite3]のプラットフォームを検出できません。デフォルトは[org.eclipse.persistence.platform.database.DatabasePlatform]です。使用されているデータベースダイアレクトが、使用しているデータベースと一致しない場合があります。プロパティeclipselink.platform.class.nameを使用してプラットフォームを明示的に指定してください。

ただし、構成はほぼ正常に機能しているように思われます。

しかし、関連するエンティティ(@ManyToOneなど)を持つモデルがある場合、テーブルを自動的に作成することはできません。

[EL警告]:2012-09-18 18:05:42.629--ServerSession(31125695)--例外[EclipseLink-4002](Eclipse Persistence Services-2.4.0.v20120608-r11652):org.eclipse.persistence.exceptions .DatabaseException内部例外:java.sql.SQLException:[SQLITE_ERROR] SQLエラーまたはデータベースがありません(「CONSTRAINT」の近く:構文エラー)エラーコード:0

呼び出し:ALTER TABLE blub ADD CONSTRAINT FK_blub_customer_id FOREIGN KEY(customer_id)REFERENCES customer(customer_id)

クエリ:DataModifyQuery(sql = "ALTER TABLE blub ADD CONSTRAINT FK_blub_customer_id FOREIGN KEY(customer_id)REFERENCES customer(customer_id)")

ご覧のとおり、外部キー制約の追加作成はsqliteではサポートされていません。

問題を解決する方法を知っていますか?

よろしくお願いします

4

1 に答える 1

1

独自のDatabasePlatformサブクラスを追加し、メソッドを追加します。

public boolean supportsForeignKeyConstraints() {
        return false;
}

次に、「eclipselink.target-database」プロパティを使用してこのプラットフォームを使用します。

また、バグをログに記録してSQLiteサポートを追加し、プラットフォームの作成に成功した場合はプラットフォームをアタッチしてください。

UPDATE 18/08/2015
このオプションが新しいかどうかわからない場合は、JDBC接続構成/プロパティでに設定できるようforeign_keysになりました。falseこのようにして、これらの警告メッセージを回避し、必要に応じて外部キーを作成します。それを設定する1つの方法は、次を使用することです。

SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(false);
Properties dbProps = config.toProperties();
于 2012-09-19T13:53:58.367 に答える