“java.lang.TypeNotPresentException:类型 org.hibernate.SessionFactory 不存在”

问题描述 投票:0回答:3

尝试在 intelliJIdea 上使用 hibernate + tomcat 运行 spring MVC 项目时出现“java.lang.TypeNotPresentException:类型 org.hibernate.SessionFactory 不存在”错误。

这是我在 pom.xml 中的依赖项

<dependencies>
        <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-tx</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

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



        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.12.Final</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
            <scope>system</scope>
            <systemPath>C:/Users/egulocak/Downloads/ojdbc-full(1)/OJDBC-Full/ojdbc6.jar</systemPath>
        </dependency>


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
    </dependencies>      

我的 Dispatcher.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
        xmlns="http://www.springframework.org/schema/mvc"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:beans="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing
        infrastructure -->
    <context:component-scan base-package="com.efe.*" />
    <context:annotation-config />
    <annotation-driven />


    <!-- Enables the Spring MVC @Controller programming model -->


    <!-- Handles HTTP GET requests for /resources/** by efficiently serving
        up static resources in the ${webappRoot}/resources directory -->


    <!-- Resolves views selected for rendering by @Controllers to .jsp resources
        in the /WEB-INF/views directory -->
    <beans:bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <beans:bean id="dataSource"
                class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <beans:property name="driverClass"
                        value="oracle.jdbc.OracleDriver" />
        <beans:property name="jdbcUrl"
                        value="jdbc:oracle:thin:hr@//localhost:1521.org:1521/xe" />
        <beans:property name="user" value="hr" />
        <beans:property name="password" value="hr" />
    </beans:bean>

    <beans:bean id="sessionFactory"
                class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect
                </beans:prop>
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
                <beans:prop key="hibernate.format_sql">true</beans:prop>
            </beans:props>
        </beans:property>


        <beans:property name="packagesToScan"
                        value="com.efe.entities" />
    </beans:bean>

    <beans:bean id="hibernateTransactionManager"
                    class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <beans:property name="sessionFactory"
                        ref="sessionFactory" />
    </beans:bean>
    <tx:annotation-driven
            transaction-manager="hibernateTransactionManager" />





</beans:beans>

我的实体

@Entity
@Table(name="person")
public class Person {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String name;

    private String country;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}

家庭控制器

@Controller
public class HomeController {

    @Autowired
    SessionFactory sessionFactory;



    @GetMapping("/")
    public String index(Model m) {
        m.addAttribute("someAttribute", "someValue");



        Person person = new Person();
        person.setId(1);
        person.setName("efe");
        person.setCountry("Italy");

        sessionFactory.getCurrentSession().save(person);

           return "index";
    }
}

Apllciations 在服务器上运行,但我收到 500 内部服务器错误

java.lang.TypeNotPresentException:类型 org.hibernate.SessionFactory 不存在

java hibernate spring-mvc
3个回答
0
投票

也许您只是在 pom.xml 文件中缺少打包属性?添加战争包装对我有用。

<packaging>war</packaging>

0
投票

您应该检查:

  • POM 依赖项的顺序
  • 您的构建路径的状态。
当 java 找不到 Type 的定义,尝试使用指定名称访问时,会抛出 TypeNotPresentException

more

问题可能是 java 在 Spring ORM 之前无法在 .POM 依赖项中找到特定类型。检查您是否在 POM 中的 spring orm 之前声明 hibernate-core 依赖项。

还要检查“hibernate-core”内部是否有名为“types”的包。

如果不起作用,请检查您的构建路径是否正确。


0
投票
这方面有什么更新吗?我被困住了。尝试重新排序依赖项。尝试了另一个建议,多个休眠版本可以混合,所以我清除了 Maven 存储库。似乎没什么作用。我也不怀念战争

© www.soinside.com 2019 - 2024. All rights reserved.