Uploaded image for project: 'iBatis for Java [READ ONLY]'
  1. iBatis for Java [READ ONLY]
  2. IBATIS-750

Immutable POJO fails to load when lazyLoading is enabled

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Reopened
    • Major
    • Resolution: Unresolved
    • 3.0 Beta 9
    • None
    • Core
    • None

    Description

      Immutable POJO fails to load when lazyLoading is enabled with exception:

      Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
      at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:721)
      at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:499)
      at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
      at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
      at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
      at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
      at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:663)
      at org.apache.ibatis.executor.loader.ResultObjectProxy$EnhancedResultObjectProxyImpl.createProxy(ResultObjectProxy.java:34)
      at org.apache.ibatis.executor.loader.ResultObjectProxy.createProxy(ResultObjectProxy.java:17)
      at org.apache.ibatis.executor.resultset.FastResultSetHandler.createResultObject(FastResultSetHandler.java:270)
      at org.apache.ibatis.executor.resultset.FastResultSetHandler.getRowValue(FastResultSetHandler.java:170)
      at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleRowValues(FastResultSetHandler.java:129)
      at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleResultSet(FastResultSetHandler.java:105)
      at org.apache.ibatis.executor.resultset.FastResultSetHandler.handleResultSets(FastResultSetHandler.java:95)
      at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:40)
      at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:55)
      at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:41)
      at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:90)
      at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:68)
      at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:59)
      ... 36 more

      I guess the source of the problem is usage of static method:

      Enhancer.create(type, new EnhancedResultObjectProxyImpl(target, lazyLoader));

      That doesn't allow to specify constructor arguments, thought iBatis know them. This will effectively limit using immutable objects with iBatis as lazy loading is set globally and is pretty often used.

      Attachments

        Activity

          People

            cbegin Clinton Begin
            novoj Jan Novotný
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated: