2016-07-20 9 views
0

私はこのスリック2.1ベースのレポ方法があります。複数文スリック2.1 withDynSessionブロック

getDatabaseは単に slick.jdbc.JdbcBackendから Database.forURL(..)を返し
def addContentBySourceInfo(userId: UUID, adopted: Boolean, contentId: UUID, contentInfo: ContentWithoutId): Either[ContentAlreadyExistsError, Content] = { 

    getDatabase withDynSession { 
    val content = contentInfo.toContent(contentId) 

    Try { 
     ContentTable.query += content 
     UserContentTable.query += UserContentModel(userId, contentId, Some(adopted)) 
    } match { 
     case Failure(e:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException) => 
     Left(ContentAlreadyExistsError(content.source, content.sourceId)) 
     case Failure(e) => throw e // could be some other error, and we should fail fast. 
     case Success(s) => Right(content) 
    } 
    } 
} 

を。

Slick 3.xのDBIO APIとの互換性をどのように変換しますか?

注:私は(私はまだ私のリポジトリAPIを壊したくないすなわち)非同期呼び出しを処理するために私の全体のリポジトリ層をアップグレードする準備ができていますまで、私は、これらのメソッドに同期を維持したいと思い

答えて

1

あなたはこのような何か試してみてください:

def addContentBySourceInfo(userId: UUID, adopted: Boolean, contentId: UUID, contentInfo: ContentWithoutId): Either[ContentAlreadyExistsError, Content] = { 
    val content = contentInfo.toContent(contentId) 
    val actions = DBIO.seq(
    ContentTable.query  += content, 
    UserContentTable.query += UserContentModel(userId, contentId, Some(adopted)) 
) 

    Try(Await.result(db.run(actions), Duration.Inf)) match { 
    case Failure(e:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException) => 
     Left(ContentAlreadyExistsError(content.source, content.sourceId)) 
    case Failure(e) => throw e 
    case Success(s) => Right(content) 
    } 
} 
+0

おかげで、ちょうど見た後に似た何かを報告して戻ってきた:https://youtu.be/WvxXz7aklik?t=30m16s – ThaDon

関連する問題