3

我想在一个简单的 Java Swing 应用程序中使用 JPA 2.0 和 EclipseLink (2.4.0) 和 sqlite 3.7.2。

我遇到的第一件事是,EclipseLink 不支持 sqlite。这是输出:

[EL 信息]:2012-09-18 18:05:42.246--ServerSession(31125695)--EclipseLink,版本:Eclipse Persistence Services - 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 支持,如果您成功创建平台,请附加您的平台。

更新 18/08/2015
不确定此选项是否是新选项,您现在foreign_keys可以false在 JDBC 连接配置/属性中设置为。通过这种方式,您将避免这些警告消息,它会根据需要创建外键。设置它的一种方法是使用:

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