Scala 使用';使用';

Scala 使用';使用';,scala,squeryl,Scala,Squeryl,我正在学习Squeryl并试图理解“使用”语法,但找不到关于它的文档 在下面的示例中,创建了两个数据库,A包含单词Hello,B包含单词再见。其目的是查询A的内容,然后添加单词World,并将结果写入B 预期控制台输出是插入的消息(2,HelloWorld) 目前,代码打印插入的消息(2,再见世界),除非在val结果行末尾添加了toList 是否有某种方法可以将结果绑定到查询以使用sessionA,即使在内部使用(sessionB)进行计算也是如此?这似乎比使用toList强制查询计算内容并将其

我正在学习Squeryl并试图理解“使用”语法,但找不到关于它的文档

在下面的示例中,创建了两个数据库,A包含单词Hello,B包含单词再见。其目的是查询A的内容,然后添加单词World,并将结果写入B

预期控制台输出是插入的消息(2,HelloWorld)

目前,代码打印插入的消息(2,再见世界),除非在val结果行末尾添加了toList

是否有某种方法可以将结果绑定到查询以使用sessionA,即使在内部使用(sessionB)进行计算也是如此?这似乎比使用toList强制查询计算内容并将其存储在内存中更可取

更新

感谢Dave Whittaker的回答,下面的代码片段在不使用“toList”的情况下修复了它,并纠正了我对“使用”和查询运行的理解

val results = from(myTable)(s => select(s))

using(sessionA){            
    results.foreach(m => {
        val newMsg = m.copy(msg = (m.msg+"World"))
        using(sessionB){myTable.insert(newMsg)}
        println("Inserted "+newMsg)
    })
}

首先,我为缺少文档表示歉意。using()构造是一项新功能,仅在快照生成中可用。事实上,我昨天与Max讨论了早期采用者的一些文档问题,我们正在努力解决这些问题


我想不出将特定会话绑定到查询的方法。看看您的示例,反转事务似乎是一个简单的解决方法。创建查询时,Squeryl实际上并不访问数据库,它只创建一个表示要执行的SQL的AST,因此此时不需要发出using(sessionA)命令。然后,当您准备迭代结果时,可以将查询调用封装在using(sessionB)中嵌套的using(sessionA)中。这有意义吗?

Dave,感谢您在Squiryl上的所有努力,它改变了我对ORM的看法,并坚定了我对Scala的承诺。我很惊讶使用()只应该出现在快照中,因为我确信我刚刚从网站上删除了jar。我用你的解决方案更新了我的问题,这确实澄清了问题。
val results = from(myTable)(s => select(s))

using(sessionA){            
    results.foreach(m => {
        val newMsg = m.copy(msg = (m.msg+"World"))
        using(sessionB){myTable.insert(newMsg)}
        println("Inserted "+newMsg)
    })
}