我想在一个简单的Java应用程序中使用EclipseLink (2.4.0)和sqlit3.7.2的JPA2.0。
我遇到的第一件事是,EclipseLink不支持sqlite。这是输出:
EL信息: 2012-09-18 18:05:42.246--ServerSession(31125695)--EclipseLink,版本: Eclipse持久性服务- 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)--Exception EclipseLink-4002:org.eclipse.persistence.exceptions.DatabaseException内部异常: java.sql.SQLException: SQLITE_ERROR SQL错误或缺少数据库(接近“约束”:语法错误)错误代码:0 调用: ALTER添加约束FK_blub_customer_id外键(customer_id)引用客户(customer_id) 查询: DataModifyQuery(sql="ALTER约束FK_blub_customer_id外键(customer_id) REFERENCES (customer_id)")
如您所见,sqlite不支持外键约束的额外创建。
你知道如何解决这个问题吗?
诚挚的问候
发布于 2012-09-19 13:53:58
添加您自己的DatabasePlatform子类并添加方法,
public boolean supportsForeignKeyConstraints() {
return false;
}然后使用这个平台使用"eclipselink.target-database“属性。
还请记录一个bug以添加SQLite支持,如果您成功地创建了一个平台,请附加您的平台。
更新18/08/2015
不确定此选项是否是新选项,您现在可以在JDBC连接配置/属性中将foreign_keys设置为false。这样,您将避免这些警告消息,并且它将根据需要创建外键。设置它的一种方法是使用:
SQLiteConfig config = new SQLiteConfig();
config.enforceForeignKeys(false);
Properties dbProps = config.toProperties();https://stackoverflow.com/questions/12481700
复制相似问题