我已创建了两个实体(RegularEmployee
和ContactEntity
)来扩展Employee
实体。
@Entity
@Table(name="employees")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(value="employee")
public class Employee {
@Id
@GeneratedValue
private Long id;
private String name;
...
我正在使用SINGLE_TABLE
继承实现,创建了一个通用的JpaRepository用于操作数据:
@Repository
public interface EmployeeRepository<T extends Employee> extends JpaRepository<T, Long> {
}
我还创建了Service类,自动装配了这三个通用存储库的实例,并为每个类编写了特定的方法。
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository<Employee> employeeRepo;
@Autowired
private EmployeeRepository<RegularEmployee> regularRepo;
@Autowired
private EmployeeRepository<ContractEmployee> contractRepo;
public List<Employee> getAllEmployee() {
return employeeRepo.findAll();
}
public List<RegularEmployee> getAllRegularEmployee(){
return regularRepo.findAll();
}
public List<ContractEmployee> getAllContractEmployee() {
return contractRepo.findAll();
}
...
我的问题是,当我尝试查找所有普通员工或合同员工时,总是会得到所有类型的员工(员工、普通员工和合同员工)。我不知道为什么会这样,即使该方法的签名表明它返回了适当的类型。
RegularEmployee
,我设置了@DiscriminatorValue("regularemployee")
,而对于ContractEmployee
,我设置了@DiscriminatorValue("contractemployee")
。 - whatspoppin