Spring JPA,如何解决“java.lang.IllegalArgumentException:不是托管类型”错误?

2023-12-30

我正在尝试将 JPA 用于 Java Spring Boot 项目。下面给出了相关的类。当我运行 main 方法时,我得到java.lang.IllegalArgumentException: Not a managed type: class com.domain.example.model.Course多次出错,应用程序崩溃。我尝试了不同的配置,但似乎都不起作用,因为它们都会导致相同的问题。我该如何解决not a managed type issue?

主要类别:

package com.domain.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

// @Configuration
// @EnableAutoConfiguration// (exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
// @ComponentScan
@SpringBootApplication
// @EnableJpaRepositories
@EntityScan(basePackages = {"com.domain.example.model"})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
    }
}

型号类别:

package com.domain.example.model;

import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
// import lombok.RequiredArgsConstructor;

@Entity
@Data
@Table(name = "course")
// @RequiredArgsConstructor
public class Course {
    @Id
    @GeneratedValue(generator = "UUID")
    @Column(name = "course_id")
    private final UUID courseId;

    @NotNull
    @Column(name = "code")
    private final Long code;

    @NotBlank
    @Column(name = "name")
    private final String name;

    public Course(
        @JsonProperty("courseId") UUID courseId,
        @JsonProperty("code") Long code,
        @JsonProperty("name") String name
    ) {
        this.courseId = (courseId == null) ? UUID.randomUUID() : courseId;
        this.code = code;
        this.name = name;
    }
}

存储库:

package com.domain.example.repository;

import java.util.List;
import java.util.UUID;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.domain.example.model.Course;

@Repository
public interface ICourseRepository extends JpaRepository<Course, UUID> {
    List<Course> findAllByCode(Long code); // temporary
}

服务:

package com.domain.example.service;

import java.util.List;
import org.springframework.stereotype.Service;
import com.domain.example.model.Course;
import com.domain.example.repository.ICourseRepository;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class CourseService implements ICourseService {

    private final ICourseRepository courseRepository;

    @Override
    public boolean saveCourse(Course course) {
        courseRepository.save(course);
        return true;
    }

    @Override
    public List<Course> getAllCourses() {
        return courseRepository.findAll();
    }

    @Override
    public List<Course> getAllCoursesByCode(Long code) {
        return courseRepository.findAllByCode(code);
    }
    
}

错误:

java.lang.IllegalArgumentException: Not a managed type: class com.domain.example.model.Course

正如 @xerx593 建议的那样,更改所有导入javax.persistance to jakarta.persistance解决了这个问题。

以前的模型类:

package com.domain.example.model;

import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
// import lombok.RequiredArgsConstructor;

@Entity
@Data
@Table(name = "course")
// @RequiredArgsConstructor
public class Course {
    // ... implementation ...
}

新模型类:

package com.domain.example.model;

import java.util.UUID;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
// import lombok.RequiredArgsConstructor;

@Entity
@Data
@Table(name = "course")
// @RequiredArgsConstructor
public class Course {
    // ... implementation ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring JPA,如何解决“java.lang.IllegalArgumentException:不是托管类型”错误? 的相关文章

随机推荐