我刚刚将Spring 3.0.5迁移到3.1 GA。 我在初始化期间遇到了运行时错 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/spring/infrastructure-config.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: NULL … Caused by: java.lang.NoSuchFieldError: NULL at org.springframework.expression.TypedValue.<clinit>(TypedValue.java:32) at org.springframework.expression.spel.support.StandardEvaluationContext.setRootObject(StandardEvaluationContext.java:85) at org.springframework.expression.spel.support.StandardEvaluationContext.<init>(StandardEvaluationContext.java:74) at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:124) at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1299) at […]
重要提示:这已被作为4.1.2的目标修复版本的Spring问题接受。 我的目标是在从Hibernate的ScrollableResults生成HTTP响应时实现O(1)空间复杂性。 我想保留一个MessageConverter分派的标准机制来处理从@Controller返回的对象。 我已经设置了以下内容: MappingJackson2HttpMessageConverter了一个处理Java 8 Stream的JsonSerializer ; ScrollableResultSpliterator需要将ScrollableResults封装到Stream ; OpenSessionInViewInterceptor需要保持Hibernate会话在MessageConverter打开; 设置hibernate.connection.release_mode为ON_CLOSE ; 确保JDBC连接具有必需的ResultSet可保存性: con.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT) 。 另外,我需要一个支持这种可保存性的数据库。 PostgreSQL是这样一个数据库,我没有这个问题。 我遇到的最后一个绊脚石是HibernateTransactionManager对事务提交使用的策略:除非底层会话是“Hibernate-managed”,否则它将disconnect() ,closures我的游标以及所有其他事物。 这种政策在一些特殊情况下是有用的,特别是“对话范围内的会议”,这远远不符合我的要求。 我设法解决了这个问题:我不得不用一个方法覆盖违规的方法,除了删除的disconnect()调用之外,它实际上是一个原始的复制粘贴,但是它必须通过reflection来访问private API。 public class NoDisconnectHibernateTransactionManager extends HibernateTransactionManager { private static final Logger logger = LoggerFactory.getLogger(NoDisconnectHibernateTransactionManager.class); public NoDisconnectHibernateTransactionManager(SessionFactory sf) { super(sf); } @Override protected void doCleanupAfterCompletion(Object transaction) { final JdbcTransactionObjectSupport txObject = (JdbcTransactionObjectSupport) transaction; final […]
我正在浏览Spring支持的数据访问技术,我注意到它提到了多种select,我不确定它们之间的区别: Spring-DAO( http://docs.spring.io/spring/docs/2.0.8/reference/dao.html ) Spring-ORM( http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html ) Spring-JDBC( http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html ) 据我所知,Spring JDBC提供了用于通过简单的旧方法来减less访问数据库的样板代码的模板 – 您可以编写自己的SQL查询。 Spring-ORM为通过ORM技术访问数据库提供了简化模板,如Hibernate,My(i)Batis等 Spring-DAO按照Spring的网站: Spring中的数据访问对象(Data Access Object,DAO)支持旨在使得JDBC,Hibernate或JDO等数据访问技术以一致的方式工作 我对ORM vs JDBC有点清楚,因为它们是以不同的方式访问数据库。 但是Spring-DAO只是简单的混淆! 任何人都可以澄清这三者之间究竟有什么不同? 哪种情况下应该首选? 此外,还有另一个项目Spring-DATA也可用( http://projects.spring.io/spring-data/ )现在,它是一种由Spring支持的所有数据访问技术的父项目,还是只是一个新的Spring-DAO的名字?