【问题标题】:How to apply hibernate annotations to the child class of abstract class如何将hibernate注解应用于抽象类的子类
【发布时间】:2020-05-05 08:23:51
【问题描述】:

我有一个名为 Staff 的抽象类。 InstructorLecturerStaff 超类的派生类。我需要在 InstructorLecturer 类中使用休眠注释。

Staff.java

public abstract class Staff {
    private int staffID;
    private String firstName;
    private String lastName;
    private String mobile;
    private String email;
    private double salary;
    private String city;
    private String street;

    //getters and setters
}

这是子类,我在子类中再次使用 staffID 来应用 @Id 注释。

Lecturer.java

@Entity
@Table(name = "lecturer")
public class Lecturer extends Staff {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int staffID;

    private int lectureHours;

    public int getLectureHours() {
        return lectureHours;
    }

    public void setLectureHours(int lectureHours) {
        this.lectureHours = lectureHours;
    }
}

我像往常一样使用服务类和控制器以及 JPARepositories。但数据库表仅包含 2 个值字段(staffID 和 LectureHours)。如下。

LecturerRepository.java

package com.example.backend.admin.Repositories;

import com.example.backend.admin.models.Lecturer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface LecturerRepository extends JpaRepository<Lecturer, Integer> {

}

LecturerController.java

@RestController
@RequestMapping("/lecturers")
public class LecturerController {
    private static Logger logger = LoggerFactory.getLogger(LecturerController.class);
    @Autowired
    LecturerService lecturerService;

    /**
     * to insert a new lecturer
     * @param lecturer new lecturer
     * @return insert lecturer
     */
    @PostMapping("/add")
    public Lecturer addLecturer(@RequestBody Lecturer lecturer) {
        Lecturer lecturer1 = null;
        try {
            lecturer1 = lecturerService.addLecturer(lecturer);
        } catch (NullPointerException e) {
            logger.error("check the payload, null pointer is throwing", e);
        }
        return lecturer1;
    }
}

LecturerService.java

@Service
public class LecturerService {
    @Autowired
    LecturerRepository lecturerRepository;

    /**
     * to invoke save method in jpa
     * @param lecturer new lecturer
     * @return inserted lecturer
     */
    public Lecturer addLecturer(Lecturer lecturer){
        return lecturerRepository.save(lecturer);
    }
}

我想将 Lecturer 类的所有字段添加到数据库中。那我该怎么办呢?

【问题讨论】:

    标签: java hibernate spring-boot orm


    【解决方案1】:

    你需要用@MappedSuperclass注释抽象类,这样你的@Entity类将继承扩展类的所有属性。

    【讨论】:

      猜你喜欢
      • 2012-05-20
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2017-09-04
      • 2019-09-22
      相关资源
      最近更新 更多