我想在一个简单的 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/