का उपयोग कर सत्र को बाध्य त्रुटि होना चाहिए अद्यतन: ठीक है, मैंने जिस समस्या का सामना किया था, ठीक है, लेकिन मुझे अभी भी यकीन नहीं है कि मैं क्या गलत कर रहा था। किसी भी मामले में, मैं IRCDB में निम्न विधि ने लिखा है:स्क्वायरल
def tryit[T](p: => T) = {
Class.forName("org.h2.Driver") //what's the point in this...?
SessionFactory.concreteFactory = Some(() =>
Session.create(java.sql.DriverManager.getConnection("jdbc:h2:~/irc","ScalaIRC",""), new H2Adapter))
transaction {
p
}
}
तो इतना है कि यह प्रयोग किया है:
val query = from(IRCDB.channels)(c => select(c))
IRCDB.tryit {
for (r <- query) println("chan: " + r.name)
}
और अब यह काम करता है। मेरी समझ से, मेरा मानना था कि एक बार सत्र फ़ैक्टरी का उपयोग करके सत्र बनाया गया था, मैं कहीं भी transaction { ... }
का उपयोग करने में सक्षम हूं जिसके पास उचित आयात है। जाहिर है, मेरी समझ गलत है।
यदि किसी को जोड़ने के लिए कुछ भी है तो कृपया करें।
तो, मैंने अभी जिस परियोजना पर काम कर रहा हूं उसके लिए स्क्वायरल का उपयोग शुरू किया है, इसलिए यह मेरे हिस्से पर एक निरीक्षण हो सकता है। तो, पहले कोड:
मैं निम्नलिखित आयात है:
import org.squeryl.PrimitiveTypeMode._
import java.sql.Timestamp
import java.sql.DriverManager
import java.util.Date
import org.squeryl.adapters.H2Adapter
import org.squeryl.dsl.{OneToMany, ManyToOne, CompositeKey2}
import org.squeryl._
मैं निम्न तालिका को परिभाषित किया है:
class ChannelTable(val id: Long, val name : String,
val p_mode : Boolean, val s_mode : Boolean,
val i_mode : Boolean, val t_mode : Boolean,
val n_mode : Boolean, val m_mode : Boolean,
val key : Option[String]) extends KeyedEntity[Long] {
def this() = this(0,"", false, false, false, false, false, false, Some(""))
lazy val bans:OneToMany[ChannelBanTable] = IRCDB.channelToChanBans.left(this)
lazy val users = IRCDB.channelUsers.left(this)
lazy val invites = IRCDB.channelInvites.left(this)
}
और निम्नलिखित स्कीमा परिभाषित:
object IRCDB extends Schema {
val channels = table[ChannelTable]
on(channels)(c => declare(
c.p_mode defaultsTo(false),
c.s_mode defaultsTo(false),
c.i_mode defaultsTo(false),
c.t_mode defaultsTo(false),
c.n_mode defaultsTo(false),
c.m_mode defaultsTo(false),
c.name is(unique, indexed)
))
def init {
Class.forName("org.h2.Driver") //what's the point in this...?
SessionFactory.concreteFactory = Some(() =>
Session.create(DriverManager.getConnection("jdbc:h2:~/irc","ScalaIRC",""), new H2Adapter))
}
def getAllChannels = transaction { from(channels)(c => select(c))}
}
मैं कंसोल पर निम्नलिखित के साथ तालिका में सम्मिलित करने में सक्षम हूं:
scala> import db._;import org.squeryl.PrimitiveTypeMode._
import db._
import org.squeryl.PrimitiveTypeMode._
scala> IRCDB.init
scala> transaction { IRCDB.channels.insert(new ChannelTable(0,"#chan_name", false, false, false, false, false, false, None)) }
res3: db.ChannelTable = [email protected]
मैं एच 2 कंसोल के साथ पुष्टि कर सकता हूं कि यह वास्तव में होता है।
java.lang.RuntimeException: no session is bound to current thread, a session must be created via Session.create
and bound to the thread via 'work' or 'bindToCurrentThread'
at scala.Predef$.error(Predef.scala:58)
at org.squeryl.Session$$anonfun$currentSession$1.apply(Session.scala:117)
at org.squeryl.Session$$anonfun$currentSession$1.apply(Session.scala:117)
at scala.Option.getOrElse(Option.scala:59)
at org.squeryl.Session$.currentSession(Session.scala:116)
at org.squeryl.dsl.AbstractQuery.org$squeryl$dsl$AbstractQuery$$_dbAdapter(AbstractQuery.scala:136)
at org.squeryl.dsl.AbstractQuery$$anon$1.<init>(AbstractQuery.scala:140)
at org.squeryl.dsl.AbstractQuery.iterator(AbstractQuery.scala:138)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:79)
at org.squeryl.dsl.AbstractQuery.foreach(AbstractQuery.scala:27)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:206)
at org.squeryl.dsl.AbstractQuery.map(AbstractQuery.scala:27)
at scala.runtime.ScalaRunTime$.inner$1(ScalaRunTime.scala:255)
at scala.runtime.ScalaRunTime$.stringOf(ScalaRunTime.scala:258)
at RequestResult$line7$object$.<init>(<console>:12)
at RequestResult$line7$object$.<clinit>(<console>)
at RequestResult$line7$object.scala_repl_result(<console>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1$$anonfun$apply$18.apply(Interpreter.scala:981)
at scala.util.control.Exception$Catch.apply(Exception.scala:79)
at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1.apply(Interpreter.scala:980)
at scala.tools.nsc.Interpreter$Request$$anonfun$loadAndRun$1.apply(Interpreter.scala:980)
at scala.util.control.Exception$Catch.apply(Exception.scala:79)
at scala.tools.nsc.Interpreter$Request.loadAndRun(Interpreter.scala:979)
at scala.tools.nsc.Interpreter.loadAndRunReq$1(Interpreter.scala:578)
at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:597)
at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:575)
at scala.tools.nsc.InterpreterLoop.reallyInterpret$1(InterpreterLoop.scala:471)
at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:514)
at scala.tools.nsc.InterpreterLoop.command(InterpreterLoop.scala:361)
at scala.tools.nsc.InterpreterLoop.processLine$1(InterpreterLoop.scala:242)
at scala.tools.nsc.InterpreterLoop.repl(InterpreterLoop.scala:248)
at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:558)
at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:609)
at org.jetbrains.plugins.scala.compiler.rt.ConsoleRunner.main(ConsoleRunner.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
मुझे समझ नहीं आता क्यों मैं इस त्रुटि हो रही हो जाएगा अगर मैं में पंक्तियां सम्मिलित करने में सक्षम था: हालांकि, जब मैं IRCDB.getAllChannels
फोन (दोनों स्काला कंसोल में और कोड में) मैं निम्नलिखित त्रुटि मिलती है टेबल लगभग उसी तरह से कर रहा है। यदि मैं कंसोल पर transaction { from(IRCDB.channels)(c => select(c)) }
निष्पादित करने का प्रयास करता हूं तो मुझे एक ही त्रुटि मिलती है।
संपादित करें: मैं पूर्ण स्टैक ट्रेस जोड़ दिया है। इसके अलावा, मैं getAllChannels
समारोह इस तरह दुबारा लिखा:
def getAllChannels = transaction {
val ret = from(channels)(c => select(c))
println("sql: " + ret)
ret
}
मैं अभी भी एक त्रुटि प्राप्त है, लेकिन यह पहली क्वेरी प्रिंट आउट करता है - मुझे लगा कि यह उपयोगी हो सकता है:
sql: 'QueryExpressionNode[root:1a0d111]:rsm='ResultSetMapper:fdf48d()--
'FieldSelectElement:ChannelTable1_name
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_i_mode
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_s_mode
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_key
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_n_mode
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_m_mode
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_id
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_t_mode
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'FieldSelectElement:ChannelTable1_p_mode
org.squeryl.dsl.ast.FieldSelectElement$$anon$3
'ViewExpressionNode[sample:ChannelTable[16e3f87]]:rsm='ResultSetMapper:442b95($(1->ChannelTable.name:java.lang.String),$(2->ChannelTable.i_mode:java.lang.Boolean),$(3->ChannelTable.s_mode:java.lang.Boolean),$(4->ChannelTable.key:Option[java.lang.String]),$(5->ChannelTable.n_mode:java.lang.Boolean),$(6->ChannelTable.m_mode:java.lang.Boolean),$(7->ChannelTable.id:java.lang.Long),$(8->ChannelTable.t_mode:java.lang.Boolean),$(9->ChannelTable.p_mode:java.lang.Boolean))--*
Select
ChannelTable1.name as ChannelTable1_name,
ChannelTable1.i_mode as ChannelTable1_i_mode,
ChannelTable1.s_mode as ChannelTable1_s_mode,
ChannelTable1.key as ChannelTable1_key,
ChannelTable1.n_mode as ChannelTable1_n_mode,
ChannelTable1.m_mode as ChannelTable1_m_mode,
ChannelTable1.id as ChannelTable1_id,
ChannelTable1.t_mode as ChannelTable1_t_mode,
ChannelTable1.p_mode as ChannelTable1_p_mode
From
ChannelTable ChannelTable1
java.lang.RuntimeException: no session is bound to current thread, a session must be created via Session.create
and bound to the thread via 'work' or 'bindToCurrentThread'
at scala.Predef$.error(Predef.scala:58)
at org.squeryl.Session$$anonfun$currentSession$1.apply(Session.scala:117)
at org.squeryl.Session$$anonfun$currentSession$1.apply(Session.scala:117)
at scala.Option.getOrElse(Option.scala:59)
at org.squeryl.Session$.currentSession(Session.scala:116)
at org.squeryl.dsl.AbstractQuery.org$squeryl$dsl$AbstractQuery$$_dbAdapter(AbstractQuery.scala:136)
at org.squeryl.dsl.AbstractQuery$$anon$1.<init>(AbstractQuery.scala:140)
at org.squeryl.dsl.AbstractQuery.iterator(AbstractQuery.scala:138)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:79)
at org.squeryl....
कि पूर्ण स्टैकट्रेस है? क्या आपके कोड में शामिल होने वाली किसी भी पंक्ति में कोई सुराग नहीं है? – thoredge
यदि आप "लेनदेन {IRCDB.getAllChannels}" कॉल करने का प्रयास करते हैं तो क्या होगा? –
मैंने पोस्ट को पूर्ण स्टैक ट्रेस के साथ अपडेट किया है। रुस्तम, मैंने बस कोशिश की और दुर्भाग्य से मुझे एक ही त्रुटि मिल गई। – ReferentiallySeethru