gpt4 book ai didi

scala - Derby 和 Circumflex ORM 的 SQL 语法错误

转载 作者:行者123 更新时间:2023-12-01 10:13:43 25 4
gpt4 key购买 nike

我正在尝试使用 Circumflex ORM (如 StackOverflow 上的建议 - hereherehere)通过 JDBC 从 Scala 项目(使用简单的构建工具构建)连接到本地(嵌入式)Apache Derby 数据库。我已仔细按照说明进行操作,但遇到了一些有趣的问题。

这是 cx.properties 文件的驱动程序和 URL 组件:

orm.connection.driver=org.apache.derby.jdbc.EmbeddedDriver
orm.connection.url=jdbc:derby:derbyDB

(这些映射到使用原始 JDBC 或 persistence.xml 中的等效项的“反射驱动程序的实例创建和创建连接”模型 - Circumflex 使用简短而贴心的属性文件,因为,你知道,它不是 XML,并且这是一件好事。)

我在我的 sbt 项目文件中添加的直接相关的依赖项是:

  "ru.circumflex" % "circumflex-orm" % "1.0",
"org.apache.derby" % "derby" % "10.6.1.0"

我创建了一个简短的示例模型,它定义了文档描述的表格的简化版本:

import java.sql.DriverManager
import ru.circumflex.orm._

class Country extends Record[Country] {
val code = "code" VARCHAR(2)
val name = "name" TEXT
}

object Country extends Table[Country]

这似乎可以编译,我可以实例化 Country 对象(使用通过 sbt 控制台调用的 Scala 2.8.0 RC5 shell)并创建一个 ActiveRecord 样式的对象,然后像这样保存它:

val c = new Country
c.code := "US"
c.name := "United States of America"
c.save

根据文档,这应该对对象运行验证,然后将其插入数据库。我得到以下异常:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered "public" at line 1, column 13.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement30...

我找到了 this thread有人遇到与“遇到“公共(public)””和 Apache Derby 类似的问题,但回复似乎没有提出有用的前进方式。

知道是什么原因造成的吗?

最佳答案

您可能需要明确告诉 Circumflex 使用 Derby 语法,而不是期望它从 JDBC 驱动程序类名和 URL 中推断出来。

例如在 Hibernate 中你需要设置方言...

看来你可以通过设置 "orm.defaultSchema" property 来解决这个问题到“public”以外的东西,这似乎是一个reserved word在 Derby 。

而且,最后的编辑,大多数时候人们在创建表时不会费心使用显式模式名称,他们只是获得默认值,但 Circumflex 似乎总是添加它,所以对于 Derby,你应该能够使用“APP”作为架构名称,或预先创建您自己的架构并使用其名称。

关于scala - Derby 和 Circumflex ORM 的 SQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3113587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com