플레이와 함께 Squeryl을 사용할 때 나는 호기심이 문제가 있습니다!.Squeryl 및 Play 문제! 스칼라에서 프레임 워크
정상적인 사용 및 그 밖의 모든 기능은 정상적으로 작동합니다. 그러나 동일한 요청에서 둘 이상의 트랜잭션을 사용하면 오류가 발생합니다.
def initDB() {
import org.squeryl._
import play.db.DB
Class.forName("com.mysql.jdbc.Driver")
SessionFactory.concreteFactory = Some(() =>
Session.create(DB.getConnection, new MySQLAdapter))
}
샘플 거래, 아래의 스택 추적에서 참조 또한 하나 :
이transaction {
import models.Game
Game.planets.insert(planetList)
Game.moons.insert(moonList)
}
스택 추적 :
Internal Server Error (500) for request GET /generate-galaxy
Execution exception (In /app/Generator.scala around line 330)
SQLException occured : You can't operate on a closed Connection!!!
play.exceptions.JavaExecutionException: You can't operate on a closed Connection!!!
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:228)
at Invocation.HTTP Request(Play!)
Caused by: java.sql.SQLException: You can't operate on a closed Connection!!!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at org.squeryl.dsl.QueryDsl$class._executeTransactionWithin(QueryDsl.scala:95)
at org.squeryl.dsl.QueryDsl$class.transaction(QueryDsl.scala:64)
at org.squeryl.PrimitiveTypeMode$.transaction(PrimitiveTypeMode.scala:40)
at generator.Generator$$anonfun$generatePlanets$2.apply(Generator.scala:330)
at generator.Generator$$anonfun$generatePlanets$2.apply(Generator.scala:55)
at generator.Generator$.generatePlanets(Generator.scala:55)
at generator.Generator$.generateGalaxy(Generator.scala:36)
at controllers.MainRouter$.generateGalaxy(MainRouter.scala:29)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:543)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:499)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:493)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:470)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:158)
... 1 more
Caused by: java.lang.NullPointerException
... 14 more
내가 아는
그건 내가 Squeryl을 설정하는 방법 스칼라 트라를 웹 프레임 워크로 사용할 때 잘 작동했기 때문에 문제가 내 쿼리에 없다는 것을 알았습니다. I 은 일 수 있습니다. 모든 트랜잭션을 하나의 트랜잭션 블록에 넣을 수는 있지만, 실제로는 우아하지 않습니다.이 경우 작동하는지 확실하지 않습니다. 목록에는 약 300 만 명의 구성원이있어 이전에 메모리가 부족한 상태가되었습니다. 데이터베이스 삽입을 50k 요소의 더 작은 블록으로 분할했습니다.
혹시 답을 받으셨어요? 나는 같은 문제를 겪고있다. – Ladlestein
IIRC, 나는 단지 한 번만 거래를 사용했습니다. – Mononofu
내 문제는 약간 다르지만 더 간단하지만이 동일한 문제가 많이 발생합니다. RenderArgs를 통해 Squeryl 값을 전달하면 SQL 쿼리 전체를 저장하고 다시 실행하려고합니다 ... 값을 전달하는 대신. 더 간단한 해결 방법을 찾으면 알려주세요. – crockpotveggies