我正在尝试在一个测试用例中访问当前的hibernate会话,并收到以下错误:
org.hibernate.HibernateException:没有绑定到线程的Hibernate会话,并且配置不允许在org.hibernate.impl的org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)处创建非事务性会话。
.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574)
我显然错过了某种设置,但不确定是什么。
任何帮助将不胜感激。这是我在Hibernate / Spring等机构的第一个裂缝,学习曲线肯定陡峭!
代码如下:
令人反感的类:
public class DbUnitUtil extends BaseDALTest {
@Test
public void exportDtd() throws Exception
{
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Connection hsqldbConnection = session.connection();
IDatabaseConnection connection = new DatabaseConnection(hsqldbConnection);
// write DTD file
FlatDtdDataSet.write(connection.createDataSet(), new FileOutputStream("test.dtd"));
}
}
基类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class BaseDALTest extends AbstractJUnit4SpringContextTests {
public BaseDALTest()
{
super();
}
@Resource
protected SessionFactory sessionFactory;
}
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:mem:sample</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="sessionFactory" class="com.foo.spring.AutoAnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="entityPackages">
<list>
<value>com.sample.model</value>
</list>
</property>
<property name="schemaUpdate">
<value>true</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
</beans>
错误的,那只会用会话管理代码填充您的代码。
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
第二件事,扩展AbstractTransactionalJUnit4SpringContextTests
public class BaseDALTest
extends AbstractTransactionalJUnit4SpringContextTests{
第三件事,用
@TransactionConfiguration
@Transactional
如果您的交易分界是正确的(围绕dao或服务),则应该完成。
在代码周围(甚至在测试内部)撒满会话和事务处理代码不是很好。
你知道为什么我会犯这个错误吗?我是Spring的新手,冬眠的,junit的。总之,我认为我应该这样做。或者我该怎么做这个测试类? 我在某处读到导致问题的原因是extends AbstractTransactionalJUnit4SpringContextTest,如果没有它,我就不会再出现这个错误了。
我已经在我的项目中引入了HibernateTransactionManager,因为我们需要对某些服务方法使用事务。我还遵循了将SessionFactory注入DAO层的最佳实践,而不是实现HibernateDaoSupport。 现在,在一些没有用@transactional注释的read方法中,我得到了一个错误: 我知道如何解决它,只需在所有地方添加@transactional即可。但我的同事
问题内容: 我正在尝试使用maven2托管的依存关系设置一个Webapp。这是我的pom.xml 如果我遇到问题,请纠正我,但是应该可以吗?我只在日食中遇到这个例外 我的设置有什么问题? 问题答案: 在依赖项中包含slf4j-api: 为您声明的spring依赖关系中的至少一个排除commons-logging依赖关系,并为commons-logging提供slf4j门面: 将用于日志记录的log
问题内容: 我在调用使用的DAO方法时遇到此异常。DAO类带有注释,我也已经在应用程序上下文配置文件中声明了。 我可以调用执行HQL查询的DAO方法,但是每当我调用首先获取Hibernate会话的DAO方法时,就会遇到此异常: 我有以下应用程序上下文配置文件: 通用DAO类(从中扩展了我的程序中使用的DAO)如下所示: 我的应用程序从应用程序上下文获取DAO: 当我尝试保存实体时会遇到异常: DA
问题内容: 当我运行多线程代码时,系统(linux)有时会将线程从一个处理器移动到另一个处理器。由于我拥有与处理器一样多的线程,因此它没有充分的理由使缓存无效,并且使我的跟踪活动混乱。 您知道如何将线程绑定到处理器,为什么系统会这样做? 问题答案: 使用(这是特定于Linux的)。 为什么调度程序会在不同处理器之间切换线程?好吧,假设您的线程最后一次在处理器1上运行,并且当前正在等待再次安排执行时
问题内容: 我是Java图形和线程的新手,我正在尝试制作一个游戏(特别是Pong)。这个想法是两个人可以在同一个键盘上玩(即,有两个通过不同键控制的拨盘)。目前,两个玩家都无法同时移动其球拍。 有针对这个的解决方法吗?单独的线程是答案吗? 如果可能的话,我希望这些拨片能够同时(至少在表面上)移动。 更新:似乎使用存储按下的键是最好的选择。我已经做到了(并且可以正常工作),但是我想知道是否其中的任何