【问题标题】:HTTP Status 500 nested exception is Unable to load class [oracle.jdbc.driver.OracleDriver]HTTP 状态 500 嵌套异常是无法加载类 [oracle.jdbc.driver.OracleDriver]
【发布时间】:2016-12-10 19:28:46
【问题描述】:

我正在使用 hibernate 4.3.6 创建基本的 spring MVC 项目,并且我使用 oracle 11g 作为我的数据库。但我不断低于异常

HTTP Status 500 - Request processing failed; nested exception is org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [oracle.jdbc.driver.OracleDriver]

我已经在我的本地安装了 ojdbc6 jar 并将其添加为 maven 依赖项,并且我尝试通过添加为外部 jar 但它似乎不起作用。请告诉我哪里错了?

这是我的 POM.xml

<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>springMVC</groupId>
    <artifactId>assignment</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>assignment Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>

        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
        </dependency>
            <!-- ORACLE database driver -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
            <scope>system</scope>
            <systemPath>F:\ojdbc6.jar</systemPath>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.6.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>
    <build>
        <finalName>assignment</finalName>
    </build>
</project>

这是我的 config.java

package assignment.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.springframework.stereotype.Component;

import assignment.service.UserEntity;

@Component
public class HibernateUtil {
    private static SessionFactory sessionFactorty=null;
public  static SessionFactory getSessionFactory(){
    if(sessionFactorty==null){
        System.out.println("inside hibernate Util");
    Configuration configuration=new Configuration();
    configuration.addAnnotatedClass(UserEntity.class);

    configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
    configuration.setProperty("hibernate.connection.driver_class", "oracle.jdbc.driver.OracleDriver");
    configuration.setProperty("hibernate.connection.username", "SYSTEM");
    configuration.setProperty("hibernate.connection.password", "sa");
    configuration.setProperty("hibernate.connection.url", "jdbc:oracle:thin:@127.0.0.1:1158:myDb");
    SchemaExport schemaExport=new SchemaExport(configuration);
    schemaExport.create(true, true);
    StandardServiceRegistryBuilder srb=new StandardServiceRegistryBuilder();
    srb.applySettings(configuration.getProperties());
    ServiceRegistry serviceRegistry=srb.build();
    sessionFactorty=configuration.buildSessionFactory(serviceRegistry);

    }
    return sessionFactorty;


}
public static void shutDown(){
    if(sessionFactorty==null)
    sessionFactorty.close();
}
}

编辑 1: 项目结构SS下方

编辑 2: 登录控制器.java

package assignment.view;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import assignment.model.User;
import assignment.model.Validator;

@Controller
@RequestMapping("/login")
public class LoginController {
    @Autowired
    Validator validator;
@RequestMapping(method=RequestMethod.POST)
public String userLogin(@ModelAttribute("userForm") User user){
    System.out.println(user);
    validator.process(user);
    return "success";
}

@RequestMapping(method=RequestMethod.GET)
public String register(Model model){
    User user=new User();
    model.addAttribute("userForm", user);
    return "Register";
}
}

UserEntity.java

package assignment.service;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="User")
public class UserEntity implements Serializable {

private static final long serialVersionUID = -6620152467355557520L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer userId;
@Column(nullable=false)
private String userName;
@Column(nullable=false)
private String email;
@Column(nullable=false)
@Temporal(TemporalType.DATE)
private Date dob;
public String getUserName() {
    return userName;
}
public void setUserName(String userName) {
    this.userName = userName;
}
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
public Date getDob() {
    return dob;
}
public void setDob(Date dob) {
    this.dob = dob;
}



}

我的服务类

package assignment.service;

import org.hibernate.Session;
import org.springframework.stereotype.Component;

import assignment.model.User;
import assignment.util.HibernateUtil;
import assignment.util.ServiceUtil;

@Component
public class UserService {


    public void saveUser(User user) {
    Session session=HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    UserEntity userEntity=new UserEntity();
    userEntity.setDob(ServiceUtil.stringToDateConverter(user.getDob()));
    userEntity.setEmail(user.getEmail());
    userEntity.setUserName(user.getUserName());
    session.save(userEntity);
    session.getTransaction().commit();
    session.disconnect();
    HibernateUtil.shutDown();
    }

}

我的 webIntilizer(web.xml 的 java 版本)

package assignment.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebInitilizer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {

        return new Class<?>[]{RootConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {

        return new Class<?>[]{WebConifg.class};
    }

    @Override
    protected String[] getServletMappings() {

        return new String[]{"/"};
    }

}

【问题讨论】:

    标签: java spring hibernate maven spring-mvc


    【解决方案1】:

    编辑以提供替代方案

    比以下更好的方法是在您的 Maven 存储库中安装 ojdbc6.jar

    假设您位于 ojdbc6.jar 所在的库中,并假设 mvn 安装在命令行运行中(将版本替换为您的版本):

    mvn install:install-file -Dfile=ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -DgeneratePom=true
    

    成功完成后,您可以在 pom.xml 中使用新的 Maven 坐标引用它:

    <dependency>
         <groupId>com.oracle</groupId>
         <artifactId>ojdbc6</artifactId>
         <version>11.2.0.3</version>
     </dependency>
    

    错误消息本质上是说您的 Oracle jdbc 驱动程序尚未成功导入到您的项目中。我建议直接在您的项目中创建一个lib 目录,将ojdbc6.jar 放在那里并将驱动程序的Maven坐标更改为:

        <!-- ORACLE database driver -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/ojdbc6.jar</systemPath>
        </dependency>
    

    【讨论】:

    • :创建 lib 文件夹并用我的项目结构更新我的问题不起作用,请验证。
    • 没错,现在 ojdbc jar 应该可以被 maven 看到并添加到类路径中。你有没有运行'mvn clean package'?你遇到同样的错误吗?
    • 是的,是的,得到了​​同样的错误。我用干净的安装目标做了 maven 构建。但它没有出现在我的课程路径中
    • 能否请您发布所有需要的类/文件以便更容易重现,以便我们了解完整情况
    • 已添加大部分文件,如有其他需要请告诉我
    【解决方案2】:

    您是否尝试将您的 ojdbc6.jar 放入 [JAVA_HOME]/jre/lib/ext

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2017-11-30
      • 2015-03-08
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多