【发布时间】:2014-03-06 08:09:20
【问题描述】:
我正在使用 slick,并且对 slick session 有疑问。我先举个例子 Order 类包含行项目,Order 可以获取行项目或删除行项目之一,Order 也可以自行定价。下面是伪代码:
类顺序{
def getLineItems= database withSesison{
//get Line Items from db repository
}
def removeLineItem(itemId: String) = database withTransaction{
implicit ss: Session =>
//Remove item from db
//Price the order
}
def priceOrder() = database withTransaction{
implicit ss: Session =>
//getLineItems
//recalculate order price by each line item
}
}
所以当我尝试删除一个订单项时,它会创建一个新的 Session 和交易,然后它会调用 priceOrder,它也会创建一个新的 Session 和交易,priceOrder 会调用 getLineItems,它会创建另一个新的会话。
从 slick 文档中,我知道每个会话都打开一个 jdbc 连接,因此在一次方法调用中它将创建 3 个数据库连接,这是对连接资源的浪费。有没有办法只使用一个连接来完成这个操作?
我知道 slick 有一个 threadLocalSession 将会话绑定到线程本地,但是从 https://groups.google.com/forum/#!topic/scalaquery/Sg42HDEK34Q 我看到我们应该避免使用 threadLocalSession。
请帮忙,谢谢。
【问题讨论】: