【问题标题】:Assertion Failure when trying to create OneToMany Relation using Squeryl尝试使用 Squeryl 创建 OneToMany 关系时断言失败
【发布时间】:2012-05-10 19:33:24
【问题描述】:

我在一个数据库中有两个类,并希望建立一个一对多的关系。没什么复杂的。但是,我在 squeryl 的 _splitEquality 中遇到断言失败(第 576 行)。 Squeryl 是 0.9.5 版

所以我有一个架构

object Tables extends Schema {
val foo = table[Foo]("foo_table")
val bar = table[Bar]("bar_table")

val fooBar = oneToManyRelation(foo,bar).via((f,b) => f.id === bar.foo_fk)
}

foo 在哪里

 class Foo (val foo_id: String, val useful_info: String) 
   extends KeyedEntity[String] {
 override def id: String = foo_id
 }

和酒吧是

class bar (val foo_fk) {
def useful_info = Tables.fooBar.right(this).head.useful_info
}

但是,这在运行时会因前面提到的断言失败而失败,特别是: assert(ee.right._fieldMetaData.isIdFieldOfKeyedEntity) 失败

【问题讨论】:

    标签: scala squeryl


    【解决方案1】:

    我通过在 Foo 上使用列注释而不是覆盖 id 来修复它。 所以 foo 变成了

    class Foo (
    @Column("foo_id")
    val id: String, 
    val useful_info: String) 
      extends KeyedEntity[String] {
    }
    

    我不完全确定为什么会这样,但我很生气。

    【讨论】:

    • 这里的问题是 KeyedEntity 必须使用名称“id”作为主键字段。在第一个示例中,“def”不足以解决此限制。在第二个中,您遵守该规则并且一切正常。
    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多