Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类加载器错误-加载器org.springframework.boot.devtools.restart.classloader.RestartClassLoader的未命名模块_Java_Spring_Spring Boot - Fatal编程技术网

Java 类加载器错误-加载器org.springframework.boot.devtools.restart.classloader.RestartClassLoader的未命名模块

Java 类加载器错误-加载器org.springframework.boot.devtools.restart.classloader.RestartClassLoader的未命名模块,java,spring,spring-boot,Java,Spring,Spring Boot,作为一个整体,我对Spring和Java非常陌生,目前正在开发一个API。我有一段代码,它访问MSSQL数据库,检索结果,并将其可视化,但它不起作用。我的意思是,如果我只调用过程并可视化结果集,它就会正常工作。问题是我无法处理“RatingProcedure”对象。当我尝试获取某个对象的值时,它会显示以下错误: 休眠: {调用dis_entity.spdcmpracovnici(?,,?,?)} 2019-09-02 01:56:01.355警告8720---[nio-8050-exec-3].

作为一个整体,我对Spring和Java非常陌生,目前正在开发一个API。我有一段代码,它访问MSSQL数据库,检索结果,并将其可视化,但它不起作用。我的意思是,如果我只调用过程并可视化结果集,它就会正常工作。问题是我无法处理“RatingProcedure”对象。当我尝试获取某个对象的值时,它会显示以下错误:

休眠: {调用dis_entity.spdcmpracovnici(?,,?,?)} 2019-09-02 01:56:01.355警告8720---[nio-8050-exec-3].m.a.ExceptionHandlerExceptionResolver:Resolved[java.lang.ClassCastException:class[Ljava.lang.Object;无法强制转换到类com.pproi.dcm.ratingprocedure.ratingprocedure([Ljava.lang.Object;位于加载程序“bootstrap”的模块java.base中;>com.pproi.dcm.ratingprocedure.ratingprocedure位于加载程序的未命名模块>org.springframework.boot.devtools.restart.classloader.RestartClassLoader@7193df92)]

代码:

@GetMapping("/replacements/{sourceId}/workers")
    public ResponseEntity<List<PossibleReplacementResponseModel>> getReplacements(@PathVariable Integer sourceId,
            @RequestParam(required = false) Integer targetWorkerId,
            @RequestParam(required = false) Integer targetLineId,
            @RequestParam(required = false) String targetWorkplaces) {

        List<PossibleReplacementResponseModel> response = new ArrayList<>();

        // 400 Bad Request
        if ((targetLineId != null && targetWorkerId != null) || (targetWorkplaces != null && targetLineId == null))
            return ResponseEntity.badRequest().build();

        StoredProcedureQuery ratingProcedure = entityManager.createNamedStoredProcedureQuery("dcmrating");

        StoredProcedureQuery storedProcedure = ratingProcedure.setParameter("pk_target_worker", targetWorkerId)
                .setParameter("pk_target_sdl", targetLineId).setParameter("pk_target_workplaces", targetWorkplaces)
                .setParameter("pk_source_sdl", sourceId);

        List<RatingProcedure> ratings = storedProcedure.getResultList();

        for(RatingProcedure rating : ratings) {
            PossibleReplacementResponseModel responseModel = new PossibleReplacementResponseModel();
            Optional<Worker> _worker = workerRepository.findById(rating.getPersonalId());

            if(_worker.isPresent()) {
                Worker worker = _worker.get();
                responseModel.setId(worker.getId());
                responseModel.setName(worker.getFullName());
                responseModel.setSkills(findWorkersSkills(worker));
                responseModel.setPhysicalExamination(findWorkersMedicalExaminationEndDate(worker));
                responseModel.setExams(findWorkersExams(worker));
                responseModel.setRestrictions(findWorkersRestrictions(worker));
                responseModel.setRating(rating.getRating());
            }
            response.add(responseModel);
        }

        return ResponseEntity.ok(response);
    }
BaseClass bClass = new ChildClass(); // NOTICE HERE -> new ChildClass();


// Somewhere in next code lines
ChildClass childClass = (ChildClass) bClass;
@GetMapping(“/replacements/{sourceId}/workers”)
public ResponseEntity getReplacements(@PathVariable Integer sourceId,
@RequestParam(必需=false)整数targetWorkerId,
@RequestParam(必需=false)整数targetLineId,
@RequestParam(必需=false)字符串(targetWorkplaces){
列表响应=新建ArrayList();
//400错误请求
if((targetLineId!=null&&targetWorkerId!=null)| |(targetWorkplaces!=null&&targetLineId==null))
返回ResponseEntity.badRequest().build();
StoredProcess ratingProcedure=entityManager.CreateNamedStoredProcess(“dcmrating”);
StoredProcedureRequesty storedProcedure=ratingProcedure.setParameter(“pk\u target\u worker”,targetWorkerId)
.setParameter(“pk_目标_sdl”,targetLineId)。setParameter(“pk_目标_工作场所”,targetWorkplaces)
.setParameter(“pk_source_sdl”,sourceId);
列表评级=storedProcedure.getResultList();
用于(评级程序评级:评级){
PossibleReplacementResponseModel responseModel=新的PossibleReplacementResponseModel();
可选的_worker=workerRepository.findById(rating.getPersonalId());
如果(\u worker.isPresent()){
Worker=_-Worker.get();
setId(worker.getId());
setName(worker.getFullName());
responseModel.setSkills(findWorkersSkills(工人));
responseModel.setPhysicalExamination(FindWorkersMedicalSaminationEndDate(工作者));
responseModel.setExams(findWorkersExams(worker));
responseModel.setRestrictions(findWorkersRestrictions(worker));
responseModel.setRating(rating.getRating());
}
response.add(responseModel);
}
返回ResponseEntity.ok(响应);
}
我甚至可能对这个解决方案有了想法!我可能应该自定义我的重启类加载器,如中所示,但我的技能到此为止,我不知道应该在文件中指定什么

有什么想法吗

非常感谢。

一个简单的解决方法是通过设置系统属性:

spring.devtools.restart.enabled = false
例如,当使用spring boot maven插件时,按以下方式启动应用程序:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.devtools.restart.enabled=false"

当我通过persistence.xml连接到mysql数据库时,我遇到了同样的问题:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_1_0.xsd"
             version="2.2">
    <!-- the name="pu" will be used in MainApplicationClass -->
    <persistence-unit name="pu1" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/spring_hibernate_jpa_db?useSSL=false&amp;serverTimezone=UTC&amp;useLegacyDatetimeCode=false"/>
            <property name="hibernate.connection.username" value="hilal" />
            <property name="hibernate.connection.password" value="hilal" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.id.new_generator_mappings" value="true" />
        </properties>
    </persistence-unit>
</persistence>

也许这里发生的是: 正在创建基类的引用,然后对继承的类进行强制转换

让我举个例子,假设我们有一个名为“BaseClass”的基类,一个名为“ChildClass”的类正在扩展“BaseClass”

这将抛出您提到的错误

这样做:

@GetMapping("/replacements/{sourceId}/workers")
    public ResponseEntity<List<PossibleReplacementResponseModel>> getReplacements(@PathVariable Integer sourceId,
            @RequestParam(required = false) Integer targetWorkerId,
            @RequestParam(required = false) Integer targetLineId,
            @RequestParam(required = false) String targetWorkplaces) {

        List<PossibleReplacementResponseModel> response = new ArrayList<>();

        // 400 Bad Request
        if ((targetLineId != null && targetWorkerId != null) || (targetWorkplaces != null && targetLineId == null))
            return ResponseEntity.badRequest().build();

        StoredProcedureQuery ratingProcedure = entityManager.createNamedStoredProcedureQuery("dcmrating");

        StoredProcedureQuery storedProcedure = ratingProcedure.setParameter("pk_target_worker", targetWorkerId)
                .setParameter("pk_target_sdl", targetLineId).setParameter("pk_target_workplaces", targetWorkplaces)
                .setParameter("pk_source_sdl", sourceId);

        List<RatingProcedure> ratings = storedProcedure.getResultList();

        for(RatingProcedure rating : ratings) {
            PossibleReplacementResponseModel responseModel = new PossibleReplacementResponseModel();
            Optional<Worker> _worker = workerRepository.findById(rating.getPersonalId());

            if(_worker.isPresent()) {
                Worker worker = _worker.get();
                responseModel.setId(worker.getId());
                responseModel.setName(worker.getFullName());
                responseModel.setSkills(findWorkersSkills(worker));
                responseModel.setPhysicalExamination(findWorkersMedicalExaminationEndDate(worker));
                responseModel.setExams(findWorkersExams(worker));
                responseModel.setRestrictions(findWorkersRestrictions(worker));
                responseModel.setRating(rating.getRating());
            }
            response.add(responseModel);
        }

        return ResponseEntity.ok(response);
    }
BaseClass bClass = new ChildClass(); // NOTICE HERE -> new ChildClass();


// Somewhere in next code lines
ChildClass childClass = (ChildClass) bClass;
我希望这将解决问题,因为它解决了我的问题

java.lang.ClassCastException:类不能强制转换为类(位于加载程序org.springframework.boot.devtools.restart.classloader的未命名模块中。RestartClassLoader.RestartClassLoader位于加载程序“app”的未命名模块中)
java.lang.ClassCastException: class <Class_Name> cannot be cast to class <Class_Name> (<Class_Name> is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader <Class_Name> is in unnamed module of loader 'app')

这与spring开发工具包有关。如果不需要,请尝试删除该包。

从pom.xml中删除devtools的依赖项将有所帮助

<!--    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
-->


我花了8个小时整理头发,直到我看到这个答案。在我修复了删除的开发工具罐后,问题就消失了。@RahulKhimasia很高兴能为您的头发做点贡献;-)