Secondary constructor in custom type

180 views
Skip to first unread message

Enrique Rodríguez

unread,
Jan 14, 2011, 12:29:27 PM1/14/11
to Squeryl
I've recently created a class called IntId that extends Intfield
defined this way:

import org.squeryl.customtypes.CustomTypesMode._
import org.squeryl.customtypes.IntField

class IntId(value: Int) extends IntField(value) {

// some code about the domain of the id...

override def toString = value.toString

// and a secondary constructor:
def this(s: String) = this(IntId.parseInt(s))

}

object IntId {

def parseInt(s: String): Int = {
if (s.length > 0) s.toInt
else IntId.UNDEFINED
}

val UNDEFINED = -1

}

The problem is that, when Squeryl tries to select from the database an
object that uses IntId as field, it fails with a
java.lang.IllegalArgumentException.

java.lang.RuntimeException: could not map row :
ResultSetRow:[1:Integer,AR1828:String,...]
with mapper :
'ResultSetMapper:1c8b884($(1-
>Product.productId:org.banquinet.util.IntId),$(2-
>Product.abbreviation:org.banquinet.util.Abbreviation),...
...
Caused by: java.lang.RuntimeException:
Product.productId:org.banquinet.util.IntId was invoked with value '1'
of type java.lang.Integer on object of type
org.banquinet.sistaller.Product

And it's curious because it works perfect if I comment the secondary
constructor.
Isn't it possible to define secondary constructors in custom type
classes?

Thank you for your time.

Maxime Lévesque

unread,
Jan 14, 2011, 1:02:16 PM1/14/11
to squ...@googlegroups.com

Please create an issue : https://github.com/max-l/Squeryl/issues and could you also :

1) try this workaround : add a zero arg constructor to your class
2) send the complete stack trace

Thanks

2011/1/14 Enrique Rodríguez <enriqu...@gmail.com>

Enrique Rodríguez

unread,
Jan 14, 2011, 1:54:31 PM1/14/11
to Squeryl
I tried adding a zero arg constructor and got the same results.

Complete stack trace:

could not map row :
ResultSetRow:[null:Integer,AR1828:String,
0:Integer,null:String,AR1828:String,1:Integer,desc:String]
with mapper :
'ResultSetMapper:1befe6e($(1-
>Producto.idTipoProducto:org.banquinet.util.IntId),$(2-
>Producto.abreviatura:org.banquinet.util.Abreviatura),$(3-
>Producto.idTipoMontaje:org.banquinet.util.IntId),$(4-
>Producto.numero:org.banquinet.util.Numero),$(5-
>Producto.nombre:org.banquinet.util.Nombre),$(6-
>Producto.idProducto:org.banquinet.util.IntId),$(7-
>Producto.descripcion:org.banquinet.util.Descripcion))--*

Caused by:

java.lang.RuntimeException: could not map row :
ResultSetRow:[null:Integer,AR1828:String,
0:Integer,null:String,AR1828:String,1:Integer,desc:String]
with mapper :
'ResultSetMapper:1befe6e($(1-
>Producto.idTipoProducto:org.banquinet.util.IntId),$(2-
>Producto.abreviatura:org.banquinet.util.Abreviatura),$(3-
>Producto.idTipoMontaje:org.banquinet.util.IntId),$(4-
>Producto.numero:org.banquinet.util.Numero),$(5-
>Producto.nombre:org.banquinet.util.Nombre),$(6-
>Producto.idProducto:org.banquinet.util.IntId),$(7-
>Producto.descripcion:org.banquinet.util.Descripcion))--*
at org.squeryl.internals.ResultSetMapper.map(ResultSetMapper.scala:
218)
at org.squeryl.View.give(View.scala:80)
at org.squeryl.dsl.AbstractQuery
$SubQueryable.give(AbstractQuery.scala:218)
at org.squeryl.dsl.boilerplate.Query1.invokeYield(Query1.scala:32)
at org.squeryl.dsl.AbstractQuery.give(AbstractQuery.scala:40)
at org.squeryl.dsl.AbstractQuery$$anon$1.next(AbstractQuery.scala:
155)
at scala.collection.Iterator$class.foreach(Iterator.scala:631)
at org.squeryl.dsl.AbstractQuery$$anon$1.foreach(AbstractQuery.scala:
118)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:79)
at org.squeryl.dsl.AbstractQuery.foreach(AbstractQuery.scala:25)
at scala.collection.generic.Growable$class.$plus$plus
$eq(Growable.scala:48)
at scala.collection.TraversableOnce
$class.toList(TraversableOnce.scala:399)
at org.squeryl.dsl.AbstractQuery.toList(AbstractQuery.scala:25)
at org.banquinet.sistaller.Producto$ProductosTable$$anonfun$getList
$1.apply(Producto.scala:86)
at org.banquinet.sistaller.Producto$ProductosTable$$anonfun$getList
$1.apply(Producto.scala:86)
at org.squeryl.dsl.QueryDsl$class._using(QueryDsl.scala:41)
at org.squeryl.dsl.QueryDsl
$class._executeTransactionWithin(QueryDsl.scala:87)
at org.squeryl.dsl.QueryDsl$class.inTransaction(QueryDsl.scala:73)
at org.squeryl.customtypes.CustomTypesMode
$.inTransaction(CustomTypesMode.scala:284)
at org.banquinet.sistaller.Producto$ProductosTable
$.getList(Producto.scala:85)
at org.banquinet.sistaller.Producto$$anonfun$getList
$2.apply(Producto.scala:108)
at org.banquinet.sistaller.Producto$$anonfun$getList
$2.apply(Producto.scala:108)
at scala.Option.getOrElse(Option.scala:59)
at org.banquinet.sistaller.Producto$.getList(Producto.scala:108)
at
org.banquinet.sistaller.ProductosEditor.<init>(ProductosEditor.scala:
27)
at
org.banquinet.sistaller.SisTallerApplication.iniciarAutentificado(SisTallerApplication.scala:
36)
at
org.banquinet.sistaller.SisTallerApplication.init(SisTallerApplication.scala:
54)
at com.vaadin.Application.start(Application.java:549)
at
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.startApplication(AbstractApplicationServlet.java:
1146)
at
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:
459)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
511)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
390)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
182)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
418)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
542)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.RuntimeException:
Producto.idTipoMontaje:org.banquinet.util.IntId was invoked with value
'0' of type java.lang.Integer on object of type
org.banquinet.sistaller.Producto
java.lang.IllegalArgumentException: argument type mismatch
at scala.Predef$.error(Predef.scala:58)
at org.squeryl.internals.FieldMetaData.set(FieldMetaData.scala:309)
at
org.squeryl.internals.FieldMetaData.setFromResultSet(FieldMetaData.scala:
269)
at
org.squeryl.internals.ColumnToFieldMapper.map(ResultSetMapper.scala:
102)
at org.squeryl.internals.ResultSetMapper$$anonfun$map
$1.apply(ResultSetMapper.scala:214)
at org.squeryl.internals.ResultSetMapper$$anonfun$map
$1.apply(ResultSetMapper.scala:213)
at scala.collection.mutable.ResizableArray
$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at org.squeryl.internals.ResultSetMapper.map(ResultSetMapper.scala:
213)
... 45 more

Caused by:

java.lang.RuntimeException:
Producto.idTipoMontaje:org.banquinet.util.IntId was invoked with value
'0' of type java.lang.Integer on object of type
org.banquinet.sistaller.Producto
java.lang.IllegalArgumentException: argument type mismatch
at scala.Predef$.error(Predef.scala:58)
at org.squeryl.internals.FieldMetaData.set(FieldMetaData.scala:309)
at
org.squeryl.internals.FieldMetaData.setFromResultSet(FieldMetaData.scala:
269)
at
org.squeryl.internals.ColumnToFieldMapper.map(ResultSetMapper.scala:
102)
at org.squeryl.internals.ResultSetMapper$$anonfun$map
$1.apply(ResultSetMapper.scala:214)
at org.squeryl.internals.ResultSetMapper$$anonfun$map
$1.apply(ResultSetMapper.scala:213)
at scala.collection.mutable.ResizableArray
$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at org.squeryl.internals.ResultSetMapper.map(ResultSetMapper.scala:
213)
at org.squeryl.View.give(View.scala:80)
at org.squeryl.dsl.AbstractQuery
$SubQueryable.give(AbstractQuery.scala:218)
at org.squeryl.dsl.boilerplate.Query1.invokeYield(Query1.scala:32)
at org.squeryl.dsl.AbstractQuery.give(AbstractQuery.scala:40)
at org.squeryl.dsl.AbstractQuery$$anon$1.next(AbstractQuery.scala:
155)
at scala.collection.Iterator$class.foreach(Iterator.scala:631)
at org.squeryl.dsl.AbstractQuery$$anon$1.foreach(AbstractQuery.scala:
118)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:79)
at org.squeryl.dsl.AbstractQuery.foreach(AbstractQuery.scala:25)
at scala.collection.generic.Growable$class.$plus$plus
$eq(Growable.scala:48)
at scala.collection.TraversableOnce
$class.toList(TraversableOnce.scala:399)
at org.squeryl.dsl.AbstractQuery.toList(AbstractQuery.scala:25)
at org.banquinet.sistaller.Producto$ProductosTable$$anonfun$getList
$1.apply(Producto.scala:86)
at org.banquinet.sistaller.Producto$ProductosTable$$anonfun$getList
$1.apply(Producto.scala:86)
at org.squeryl.dsl.QueryDsl$class._using(QueryDsl.scala:41)
at org.squeryl.dsl.QueryDsl
$class._executeTransactionWithin(QueryDsl.scala:87)
at org.squeryl.dsl.QueryDsl$class.inTransaction(QueryDsl.scala:73)
at org.squeryl.customtypes.CustomTypesMode
$.inTransaction(CustomTypesMode.scala:284)
at org.banquinet.sistaller.Producto$ProductosTable
$.getList(Producto.scala:85)
at org.banquinet.sistaller.Producto$$anonfun$getList
$2.apply(Producto.scala:108)
at org.banquinet.sistaller.Producto$$anonfun$getList
$2.apply(Producto.scala:108)
at scala.Option.getOrElse(Option.scala:59)
at org.banquinet.sistaller.Producto$.getList(Producto.scala:108)
at
org.banquinet.sistaller.ProductosEditor.<init>(ProductosEditor.scala:
27)
at
org.banquinet.sistaller.SisTallerApplication.iniciarAutentificado(SisTallerApplication.scala:
36)
at
org.banquinet.sistaller.SisTallerApplication.init(SisTallerApplication.scala:
54)
at com.vaadin.Application.start(Application.java:549)
at
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.startApplication(AbstractApplicationServlet.java:
1146)
at
com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:
459)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
511)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
390)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
182)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
418)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
542)
at org.mortbay.jetty.HttpConnection
$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:582)


On Jan 14, 4:02 pm, Maxime Lévesque <maxime.leves...@gmail.com> wrote:
> Please create an issue :https://github.com/max-l/Squeryl/issuesand could
> you also :
>
> 1) try this workaround : add a zero arg constructor to your class
> 2) send the complete stack trace
>
> Thanks
>
> 2011/1/14 Enrique Rodríguez <enriquero...@gmail.com>

Enrique Rodríguez

unread,
Jan 14, 2011, 2:19:40 PM1/14/11
to Squeryl
Now I've found that it works with a two or more args secondary
constructor.
I've looking the code and I think that maybe the problem is that, when
creating the custom type factory, it searches for a constructor with
one parameter.
>         at...
>
> read more »
Reply all
Reply to author
Forward
0 new messages