Spring4+SpringMVC+Hibernate4整合,你可能会遇到的问题

1、java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.LocalSessionFactoryBean

缺少spring-orm jar包,如下:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>

 

2、org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext

hibernate-core的jar包中org/hibernate/engine/transaction/spi/下没有TransactionContext类

由于你导入的为hibernate5的jar包,例如:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.1.Final</version>
        </dependency>

而hibernate5中没有该类,而spring-hibernate.xml中却配置的是hibernate4,例如

    <!-- 配置事务管理器 -->
    <bean name="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

只有spring4.2及以上支持hibernate5,如果使用的是spring4.2以下,则最高可选择hibernate4.3及以下

所以根据你的spring-core版本修改引入hibernate-core版本或者可以修改spring-hibernate.xml文件配置

 方式1:使用spring3则修改hibernate-core jar版本

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.21.Final</version>
</dependency>

方式2:使用spring4.2及以上则修改配置文件

    <bean name="transactionManager"
        class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean> 

http://stackoverflow.com/questions/32898333/hibernate-spring-exception-when-trying-to-create-a-transaction

 

3、找不到jconsole-1.8.0.jar和tools-1.8.0.jar

因为引入了druid.jar,依赖于这连个包

方法1:修改pom.xml让其不依赖于这两个包

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.22</version>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>jconsole</artifactId>
                     <version>1.8.0</version>
                </exclusion>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>tools</artifactId>
                    <version>1.8.0</version>
                </exclusion>
            </exclusions>
        </dependency>

方法2:去指定仓库寻找

    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.6</version>
        <scope>system</scope>
        <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency> 

 

6、输出hql语句到控制台

只需要在配置文件修改

设置hibernate.format_sql=true

然后修改sessionfactory的配置

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                <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>
            </props>
        </property>

控制台打印出的hql如下图

161305_NPho_2756867.png

用过mybatis的同学都知道,mybatis控制台输出的sql语句和mysql中类似,并且看得到传入的参数,可以很方便的copy sql语句到mysql,看sql语句执行效率,但是hql给人感觉,不是那么清晰明了。

只需要在log4j.properties添加如下语句:

#为了显示参数
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

这样控制台就会显示绑定参数了

165843_rJxR_2756867.png

还可以配置查看查询中命名参数的值,如下

log4j.logger.org.hibernate.engine.QueryParameters=DEBUG
log4j.logger.org.hibernate.engine.query.HQLQueryPlan=DEBUG 

更多详细,请戳这里 。

 

后续有其他问题再添加。

若有错误,望纠正。

转载于:https://my.oschina.net/eager/blog/733596

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值