如何将hibernate注解应用于抽象类的子类
Posted
技术标签:
【中文标题】如何将hibernate注解应用于抽象类的子类【英文标题】:How to apply hibernate annotations to the child class of abstract class 【发布时间】:2020-05-05 08:23:51 【问题描述】:我有一个名为 Staff 的抽象类。 Instructor 和 Lecturer 是 Staff 超类的派生类。我需要在 Instructor 和 Lecturer 类中使用休眠注释。
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类的快捷方法
如何将子类作为期望基类的函数的参数传递,然后将该对象传递给指向这些抽象类对象的指针向量?