【发布时间】:2020-12-18 17:29:03
【问题描述】:
我创建了两个扩展 Employee 实体的实体(RegularEmployee 和 ContactEntity)。
@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
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") -
分享RegularEmployee和ContractEmployee实体的代码。