java - JPA 2.0/EclipseLink 和 sqlite 3.7.2 - 无法创建表

标签 java sqlite jakarta-ee jpa eclipselink

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

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

[EL Info]: 2012-09-18 18:05:42.246--ServerSession(31125695)--EclipseLink, version: Eclipse Persistence Services - 2.4.0.v20120608-r11652

[EL Info]: connection: 2012-09-18 18:05:42.352--Not able to detect platform for vendor name [SQLite3]. Defaulting to [org.eclipse.persistence.platform.database.DatabasePlatform]. The database dialect used may not match with the database you are using. Please explicitly provide a platform using property eclipselink.platform.class.name.

但是,在我看来,配置几乎可以正常工作。

但是当我有一个包含相关实体的模型(即@ManyToOne)时,无法自动创建表。

[EL Warning]: 2012-09-18 18:05:42.629--ServerSession(31125695)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20120608-r11652): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near "CONSTRAINT": syntax error) Error Code: 0

Call: ALTER TABLE blub ADD CONSTRAINT FK_blub_customer_id FOREIGN KEY (customer_id) REFERENCES customer (customer_id)

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

如您所见,sqlite 不支持额外创建外键约束。

你知道如何解决这个问题吗?

最好的问候

最佳答案

添加自己的DatabasePlatform子类并添加方法,

public boolean supportsForeignKeyConstraints() {
        return false;
}

然后使用“eclipselink.target-database”属性使用这个平台。

还请记录一个错误以添加 SQLite 支持,如果您成功创建一个平台,请附上您的平台。

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

SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(false);
Properties dbProps = config.toProperties();

关于java - JPA 2.0/EclipseLink 和 sqlite 3.7.2 - 无法创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481700/

相关文章:

java - 将参数从 MainActivity.java 传递到我的 SQLiteOpenHelper 类中

ios - 为什么我的 SELECT 语句总是返回 0.0000?

java - 插入并发 HashMap

java - EndPoint 类中的 Spring WS SOAP 响应 header 修改

java - 使用 Maven 执行 Cucumber 测试

android - 存储gps数据的格式

java - D/OkHttp : <-- HTTP FAILED: javax.net.ssl.SSLException : SSL handshake aborted: ssl=0x64e3c938: I/O error during system call, 连接被对端重置

jsp - Tomcat 没有将 .jsp 转换为 servlet?

java - Spring - hibernate 错误

java - 如何配置 WildFly 10.x 以实现任何类型的持久性