如何将hibernate注解应用于抽象类的子类

Posted

技术标签:

【中文标题】如何将hibernate注解应用于抽象类的子类【英文标题】:How to apply hibernate annotations to the child class of abstract class 【发布时间】: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 类的所有字段添加到数据库中。那我该怎么办呢?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何将hibernate注解应用于抽象类的子类的主要内容,如果未能解决你的问题,请参考以下文章

批量产生ssh2项目中hibernate带注解的pojo类的快捷方法

如何在抽象类中注入bean

如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?

java hibernate注解映射类的字段可以和数据库中的字段不一致吗

Java 抽象类

hibernate注解与jpa注解