Spring4+SpringMVC+Hibernate4整合,你可能會遇到的問題

一、java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.LocalSessionFactoryBeanjava

缺乏spring-orm jar包,以下:mysql

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

 

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

hibernate-core的jar包中org/hibernate/engine/transaction/spi/下沒有TransactionContext類session

因爲你導入的爲hibernate5的jar包,例如:mybatis

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

而hibernate5中沒有該類,而spring-hibernate.xml中卻配置的是hibernate4,例如spa

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

只有spring4.2及以上支持hibernate5,若是使用的是spring4.2如下,則最高可選擇hibernate4.3及如下hibernate

因此根據你的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

 

三、找不到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> 

 

六、輸出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以下圖

用過mybatis的同窗都知道,mybatis控制檯輸出的sql語句和mysql中相似,而且看獲得傳入的參數,能夠很方便的copy sql語句到mysql,看sql語句執行效率,可是hql給人感受,不是那麼清晰明瞭。

只須要在log4j.properties添加以下語句:

#爲了顯示參數
log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

這樣控制檯就會顯示綁定參數了

還能夠配置查看查詢中命名參數的值,以下

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

更多詳細,請戳這裏 。

 

後續有其餘問題再添加。

如有錯誤,望糾正。

相關文章
相關標籤/搜索