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

时间:2012-09-18 17:03:04

标签: java sqlite java-ee jpa eclipselink

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

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

  

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

     

[EL Info]:connection: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不支持额外创建外键约束。

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

祝你好运

1 个答案:

答案 0 :(得分:1)

添加您自己的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();