簡體   English   中英

java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion

[英]java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion

我正在 eclipse Juno、Spring 3.1.1、hibernate 4.1、tomcat 7 和 mySQL 中使用 STS。

我創建了一個簡單的 MVC 模板項目。 我的目的是用戶將在表單中輸入一些數據,並且這些數據將保存在數據庫中。

我創造了:

網絡層:

  1. 簡單的形式。
  2. 從表單接收數據並將其傳遞給服務層的控制器。

服務層:

包含DAO字段並操作dao方法的服務類。

數據訪問層:

  1. 不與數據庫通信的模擬 DAO 實現。
  2. 不與數據庫通信的 Real DAO 實現。

當我用模擬 DAO 實現檢查系統時,一切正常——從 web 層到模擬 DAO。

但是當注入真正的 DAO 時,我得到了一個 404 錯誤,並且數據庫中沒有發生任何事情。

我將只顯示 DAO 實現和 root-context.xml 因為這是我認為問題的地方。

我的 DAO 實現:

@Repository
public class Presentation_page_dao_hibernate_Impl implements Presentation_page_dao {

    private  SessionFactory sessionFactory;

    @Autowired
    public Presentation_page_dao_hibernate_Impl(SessionFactory sessionFactory) {
        this.sessionFactory=sessionFactory;
        System.out.println("Hi! i'm in ActionDao_HibernateImpl constructor");
        }

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }


    public void create(Presentation_page pp) {  
        currentSession().beginTransaction();
        currentSession().save(pp);
        currentSession().getTransaction().commit();
        currentSession().close();       
    }


    public Presentation_page read(int pageid) throws PresentationPageNotFoundException {


        currentSession().beginTransaction();

        Criteria criteria=currentSession().createCriteria(Presentation_page.class);

        criteria.add(Restrictions.eq("page_id", pageid));
        List<Presentation_page> list_of_pages=criteria.list();

        currentSession().getTransaction().commit();
        currentSession().close();

        for(Presentation_page pp:list_of_pages) {
            if (pp.getPage_id()==pageid){
                return pp;
            }
        }
        return null;
    }

    public void update(Presentation_page pp) throws PresentationPageNotFoundException {

        currentSession().beginTransaction();
        currentSession().update(pp);
        currentSession().getTransaction().commit();
        currentSession().close();   

    }

    @Override
    public void delete(Presentation_page  pp) throws PresentationPageNotFoundException {

        currentSession().beginTransaction();
        currentSession().delete(pp);
        currentSession().getTransaction().commit();
        currentSession().close();
    }

}

這是我的 root-context.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"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">    

    <!-- Root Context: defines shared resources visible to all other web components -->


    <!-- For annotations -->
    <context:component-scan 
        base-package="my.topLevel.pack">
    </context:component-scan> 

    <import resource="hibernate2.xml"/>


</beans>

這是我的 hibernate.xml:

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/spring_presentation</property>
        <property name="connection.username">rotemya</property>
        <property name="connection.password">*******</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 


        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">create</property>

        <!-- Names the annotated entity class -->
        <mapping class="my.topLevel.pack.Domain"/>

    </session-factory>
</hibernate-configuration>

我對 pom.xml 有以下依賴項:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.topLevel</groupId>
    <artifactId>pack</artifactId>
    <name>SpringSTS_Sample_Project</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
        <java-version>1.6</java-version>
        <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
        <org.aspectj-version>1.6.10</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
    </properties>
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                 </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.0.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>3.0.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>javax.persistence</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.13</version>
        </dependency>
    </dependencies>

</project>

這是我的休眠 jar 文件:

在此處輸入圖片說明

我收到以下錯誤:

java.lang.NoClassDefFoundError: org/hibernate/criterion/Criterion

有任何想法嗎?

好的問題解決了!

我從 hibernate 庫文件(我創建的)中刪除了所有 jar,並通過 Maven(pom.xml 文件)添加它們。 錯誤消失了..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM