我有抽象類 Employee 和 3 個從雇員擴展的具體類。Employee例如從擴展的類OfficeEmployee當前是空的,并且還表示 db 中的表。這些具體類的唯一目的是讓 fk 參考Employee. 例如如果OfficeEmployee被創建,一個資料將保存在Employee物體中,只有 id 將保存在OfficeEmployee物體中。
這是我的 Employee 類:
@Entity
@Data
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employee_id", nullable = false, unique = true)
private int employeeId;
@Column(name = "employee_name", nullable = false)
private String name;
@Column(name = "reason_for_deactivation", length = 255)
private String reasonForDeactivation = "";
@Column(name = "deleted", nullable = false)
private Boolean isDeleted = Boolean.FALSE;
}
我已經設法撰寫了用于保存、更新和洗掉特定員工的方法,但是當我想獲取所有員工時,我不能這樣做,因為后臺休眠正在嘗試從 Employee 類創建物件,并且我收到錯誤,因為該類是抽象的.
這是獲取所有員工的方法:
@Service
public class EmployeeServiceImpl {
@Autowired
private EmployeeRepository employeeRepository;
public List<Employee> findAll() {
return employeeRepository.findAll();
}
}
我怎么解決這個問題?我愿意接受任何建議,包括改變我的架構。
uj5u.com熱心網友回復:
最簡單的解決辦法是增加@DiscriminatorColumn對Employee物體@DiscriminatorValue混凝土類。所以現在它看起來像這樣:
@Entity
@DiscriminatorColumn(name = "employee_type") // This is added
@Data
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "employee_id", nullable = false, unique = true)
private int employeeId;
@Column(name = "employee_name", nullable = false)
private String name;
@Column(name = "reason_for_deactivation", length = 255)
private String reasonForDeactivation = "";
@Column(name = "deleted", nullable = false)
private Boolean isDeleted = Boolean.FALSE;
}
和具體類:
@Entity
@Data
@DiscriminatorValue("Office_Employee") // This is added
public class OfficeEmployee extends Employee{
}
基本上它會在 Employee 物體中添加新列,employee_type并基于該列將包含有關每個員工型別的資訊,因此我現在可以獲取所有員工。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/390006.html
