我想在简单的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不支持额外创建外键约束。
你知道如何解决这个问题吗?
祝你好运
答案 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();