scala – 使用Derby和Circumflex ORM的SQL语法错误

我正在尝试使用 Circumflex ORM(如StackOverflow – here,herehere中所建议的)通过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,有人遇到类似’遇到的’公共“和Apache Derby的问题,但回复似乎没有提出一个有用的前进方式.

可能导致这种情况的任何想法?

解决方法

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

例如在Hibernate你需要设置方言……

似乎你可以通过将“orm.defaultSchema” property设置为“公共”以外的其他东西来解决它,这似乎是德比的reserved word.

并且,最终编辑,大多数时候人们在创建表时不打算使用显式模式名称,并且他们只是获得认值,但Circumflex似乎总是添加它,因此对于Derby,您应该能够使用“ APP“作为模式名称,或者事先创建自己的模式并使用其名称.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...