Thanks for your help. Your suggested alternative is working for me except for doing an update. If I say
var jrr = authors.where(a => a.auth_id === 1).single
jrr.firstName = "J.R.R."
authors.update(jrr)
the last line generates the following exception:
java.lang.ClassCastException: java.lang.Long cannot be cast to org.squeryl.dsl.CompositeKey
at org.squeryl.internals.DatabaseAdapter$$anonfun$writeUpdate$6$$anonfun$6.apply(DatabaseAdapter.scala:519)
at org.squeryl.internals.DatabaseAdapter$$anonfun$writeUpdate$6$$anonfun$6.apply(DatabaseAdapter.scala:518)
at org.squeryl.internals.Utils$DummyQuery4WhereClause$$anonfun$$init$$2$$anonfun$apply$3.apply(Utils.scala:71)
at org.squeryl.internals.Utils$DummyQuery4WhereClause$$anonfun$$init$$2$$anonfun$apply$3.apply(Utils.scala:71)
at org.squeryl.dsl.fsm.BaseQueryYield$$anonfun$whereClause$1.apply(BaseQueryYield.scala:61)
at org.squeryl.dsl.fsm.BaseQueryYield$$anonfun$whereClause$1.apply(BaseQueryYield.scala:61)
at scala.Option.map(Option.scala:129)
at org.squeryl.dsl.fsm.BaseQueryYield.whereClause(BaseQueryYield.scala:61)
at org.squeryl.dsl.fsm.BaseQueryYield.queryElements(BaseQueryYield.scala:69)
at org.squeryl.dsl.ast.QueryExpressionNode.<init>(QueryExpressionNode.scala:41)
at org.squeryl.dsl.AbstractQuery.buildAst(AbstractQuery.scala:99)
at org.squeryl.dsl.boilerplate.Query1.<init>(Query1.scala:34)
at org.squeryl.internals.Utils$DummyQuery4WhereClause.<init>(Utils.scala:68)
at org.squeryl.internals.Utils$.createQuery4WhereClause(Utils.scala:76)
at org.squeryl.internals.DatabaseAdapter$$anonfun$writeUpdate$6.apply(DatabaseAdapter.scala:518)
at org.squeryl.internals.DatabaseAdapter$$anonfun$writeUpdate$6.apply(DatabaseAdapter.scala:517)
at scala.Either.fold(Either.scala:42)
at org.squeryl.internals.DatabaseAdapter$class.writeUpdate(DatabaseAdapter.scala:515)
at org.squeryl.adapters.PostgreSqlAdapter.writeUpdate(PostgreSqlAdapter.scala:24)
at org.squeryl.Table._update(Table.scala:161)
at org.squeryl.Table.update(Table.scala:149)
at code.Main$$anonfun$main$1.apply$mcV$sp(Main.scala:53)
at code.Main$$anonfun$main$1.apply(Main.scala:27)
at code.Main$$anonfun$main$1.apply(Main.scala:27)
The exception occurs in the function writeUpdate. It certainly appears to be constructing the
update query that will be issued to the database. Line 519, where the exception occurs, is the
**'d line in the following. There's still a lot I don't know about Scala, but it appears there
is a built-in assumption that the primary key is a composite.
t.posoMetaData.primaryKey.getOrElse(error("writeUpdate was called on an object that does not extend from KeyedEntity[]")).fold(
pkMd => sw.write(quoteName(pkMd.columnName), " = ", writeValue(o_, pkMd, sw)),
pkGetter => {
val astOfQuery4WhereClause = Utils.createQuery4WhereClause(t, (t0:T) =>
** pkGetter.invoke(t0).asInstanceOf[CompositeKey].buildEquality(o.asInstanceOf[KeyedEntity[CompositeKey]].id))
astOfQuery4WhereClause.inhibitAliasOnSelectElementReference = true
astOfQuery4WhereClause.whereClause.get.write(sw)
}
)
I'm using Postgresql v9.
Byron
---------------------------------------------------------
Byron Weber Becker Voice: 519-888-4567 x34661
School of Computer Science Fax: 519-885-1208
University of Waterloo Office: DC3105
Waterloo, ON N2L 3G1
Advising FAQ: http://www.cs.uwaterloo.ca/current/faq/index.shtml
Still not working in 0.9.5-RC1?