java - 使用 iBatis 和 Spring 的 net.sf.cglib.beans.BulkBeanException

标签 java spring ibatis cglib

一个BulkBeanException当 iBatis 尝试应用结果映射时抛出该错误,但通过同一 jar 进行的部署之间不一致(本地部署没问题,服务器部署则不然)。

我想出了如何阻止这个问题(请参阅下面的答案),但我更感兴趣的是了解诊断 cglibification 为什么在不同运行时环境中发生/发生不同的策略。我认为不一致的行为是由于加载库的顺序不同造成的,但还没有弄清楚如何确认这一点( $PATH$CLASSPATH 在不同环境中解析为相同的东西)。还有什么我应该看的吗?

出现错误

  • java -jar <jar>在 CentOS 机器上
  • 在 OS X 上通过 Eclipse 运行 Mule 运行时

没有收到错误

  • java -jar <jar>在 OS X 上
  • OS X 上通过 Maven 实现 JUnit
  • 在 OS X 上通过 Eclipse 运行 JUnit

堆栈跟踪

Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in ibatis/MyClassName.xml.
--- The error occurred while applying a result map.
--- Check the MyClassName.result.
--- The error happened while setting a property on the result object.
--- Cause: net.sf.cglib.beans.BulkBeanException: 1
        at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:204) ~[mybatis-2.3.5.jar!/:?]
        at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForList(MappedStatement.java:139) ~[mybatis-2.3.5.jar!/:?]
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:578) ~[mybatis-2.3.5.jar!/:?]
        at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:552) ~[mybatis-2.3.5.jar!/:?]
        at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118) ~[mybatis-2.3.5.jar!/:?]
        at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:298) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
        at org.springframework.orm.ibatis.SqlMapClientTemplate$3.doInSqlMapClient(SqlMapClientTemplate.java:296) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
        at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:203) ~[mybatis-2-spring-1.0.1.jar!/:1.0.1]
        ... 77 more

最佳答案

iBATIS 尝试应用结果映射的 Java bean 具有异常(不符合 bean?)setter。这些 setter 没有按照标准返回 void ,而是返回对象本身,以便可以链接 set 操作(我们有一些 Haskell 程序员正在研究这个项目:))。

在发生这种情况时,通过将 setter 方法更改回之前的状态(使用 void return 定义它们)来解决该问题。

关于java - 使用 iBatis 和 Spring 的 net.sf.cglib.beans.BulkBeanException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638664/

相关文章:

java - 始终通过上下文在 Spring 服务中注入(inject)一些字段

java - 插入带有子项的@OneToMany 关系对象而不在子表中插入父项ID?

java - PostgreSQL - 整数 [] 最佳实践

java - Jtable与mysql连接时出错 "java.lang.NullPointerException"

java - 不是的 Spring AOP 代理

javascript - 使用 JavaScript 从 JSP 页面访问 java HashMap

ibatis - 在 MyBatis 中通过参数设置 FROM 子句

java - 使用 MyBatis 获取字节数组形式的 LONGBLOB

java - 访问限制 : Is not accessible due to restriction on required library . .\jre\lib\rt.jar

java - 将 Spring Roo 与 JSF 2.0 + Primefaces 结合使用时出现的问题