当前位置: 首页 > 知识库问答 >
问题:

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

尤钱明
2023-03-14

我希望在一个简单的Java Swing应用程序中结合EclipseLink(2.4.0)和SQLite3.7.2使用JPA2.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]:连接: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持久性服务-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外键(customer_id)引用客户(customer_id)

查询:DataModifyQuery(sql=“alter TABLE blub ADD CONSTRAINT FK_blub_customer_id外键(customer_id)REFERENCES customer_id)”)

正如您所看到的,SQLite不支持额外创建外键约束。

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

最诚挚的问候

共有1个答案

能文华
2023-03-14

添加自己的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();
 类似资料:
  • 我想创建基于实体的数据库。配置: null null 由于某种原因,数据库的创建发生在事务中。我发现源代码负责,但我无法找出交易是如何启动的。我可以提供更详细的信息,但也许现在已经有人可以帮忙了。 编辑:persistence.xml

  • 运行时收到此错误。

  • 我正在尝试使用EclipseLink创建一个表。正在使用的java类是:- EL警告]:2017-04-07 14:04:53.768--ServerSession(1650327539)--异常[EclipseLink-4002](Eclipse持久性服务-2.6.3.v20160428-59C81C5):org.Eclipse.Persistence.exceptions.DatabaseEx

  • 我刚开始使用hibernate,总是会遇到这样的错误: 错误:HHH000388:不成功:创建表用户(id bigint not null auto_increment,mail varchar(255),passwort varchar(255),primary key(id))错误:从存储引擎获取错误-1 这是我的映射类:

  • 我的代码更长,但我没有复制所有的代码,我看到程序停在这里 对不起我的英语。

  • 我试图在我的DB2V10.5中创建DB2 MQT表,但是我得到了以下错误消息: 在“begin-of-statement”后面发现意外的令牌“CREATE TABLE T_MQT AS(SELECT ID,COL1,C”。预期的令牌可能包括:“”...SQLCODE=-104,SQLSTATE=42601,DRIVER=4.16.53 SQL代码:-104,SQL状态:42601 下面是我的cre