我有一个小型 Maven 项目
<artifactId>spring-core</artifactId>
<artifactId>spring-test</artifactId>
<artifactId>spring-beans</artifactId>
<artifactId>spring-context</artifactId>
<artifactId>spring-aop</artifactId>
<artifactId>spring-context-support</artifactId>
<artifactId>spring-tx</artifactId>
<artifactId>spring-orm</artifactId>
<artifactId>spring-web</artifactId>
<artifactId>spring-webmvc</artifactId>
<artifactId>spring-asm</artifactId>
<artifactId>log4j</artifactId>
<artifactId>hibernate-core</artifactId>
<artifactId>hibernate-cglib-repack</artifactId>
<artifactId>hsqldb</artifactId>
<spring.version>3.0.5.RELEASE</spring.version>
<hibernate.version>3.6.1.Final</hibernate.version>
<hibernate-cglig-repack.version>2.1_3</hibernate-cglig-repack.version>
<log4j.version>1.2.14</log4j.version>
<javax-servlet-api.version>2.5</javax-servlet-api.version>
<hsqldb.version>1.8.0.10</hsqldb.version>
<mysql-connector.version>5.1.6</mysql-connector.version>
<slf4j-log4j12.version>1.5.2</slf4j-log4j12.version>
<slf4j-api.version>1.5.8</slf4j-api.version>
<javaassist.version>3.7.ga</javaassist.version>
这是我的 applicationContext :
<context:component-scan base-package="com.project.personal.admin.model"/>
<context:annotation-config />
<bean id="propertyconfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:mysql.hibernate.properties</value>
<value>classpath:mysql.jdbc.properties</value>
</list>
</property>
</bean>
<context:annotation-config/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
<property name="packagesToScan" value="com.project.personal.admin.model.domain" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
mysql.hibernate.properties
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=create
这是一个小测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:META-INF/test-project-admin-config.xml"})
@TransactionConfiguration(defaultRollback=true)
@Transactional
public class UserDAOImplTest {
@Resource(name="manager")
Manager manager;
@Autowired
UserDAO userDAO;
public UserDAOImplTest() {
}
@Test
public void testSave() {
User u1 = manager.CreateUser();
//.....
userDAO.save(u1);
User expResult = u1;
User result = (User)userDAO.getById(u1.getId());
Assert.assertEquals(expResult, result);
Assert.assertEquals(expResult.getId(), result.getId());
}
@Test
public void testUpdate(){
User u2 = manager.CreateUser();
//....
u2.setPassword("mypassword");
userDAO.save(u2);
User fromdb =(User) userDAO.getById(u2.getId());
fromdb.setEmail("claud@somemail.com");
userDAO.save(fromdb);
User result = (User) userDAO.getById(fromdb.getId());
Assert.assertNotNull(result);
Assert.assertEquals(fromdb.getEmail(), result.getEmail());
}
}
到目前为止,所有运行文件测试都成功,但只是没有 sql 输出,我想知道可能是什么原因造成的。因为这是我第一次依赖 trasactionConfiguration,我认为这可能是原因除了之前的其他项目显示 sql 之外,没有显示 sql。
我如何解决这个问题,因为强制显示sql脚本(尚未使用log4j) 感谢您的阅读。
最佳答案
您使用
@TransactionConfiguration(defaultRollback=true)
@Transactional
由于默认情况下事务会回滚,因此 Hibernate 可能不会执行任何 SQL 语句,因为回滚之前不会发生 session 刷新。
您可以通过设置 defaultRollback = false
(或在方法级别设置 @Rollback(false)
)来禁用测试事务的回滚。
如果您希望 Hibernate 发出真正的 SQL 语句,但不想提交测试事务,则可以在测试方法末尾调用 flush()
。
关于java - Spring 3.0.5 + hibernate 3.6 hibernate.show_sql 未显示。是否由于使用了事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648595/