有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用CriteriaBuilder向下转换java JPA标准API。treat()方法

实体

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
@DiscriminatorColumn(name = "EMP_TYPE")
public class Employee {
  @Id
  @GeneratedValue
  private long id;
  private String name;
    .............
}

@Entity
@DiscriminatorValue("F")
public class FullTimeEmployee extends Employee {
  private int annualSalary;
    .............
}

@Entity
@DiscriminatorValue("P")
public class PartTimeEmployee extends Employee {
  private int weeklySalary;
    .............
}

查询:

    public Page<Employee> query(Pageable page) {

        Specification<Employee> specification = (root, query, criteriaBuilder) -> {
            List<Predicate> predicates = new ArrayList<>();
            Predicate predicate1 = criteriaBuilder.equal(root.get("name"), "test");
            Root<PartTimeEmployee> PartTimeEmployeeRoot = criteriaBuilder.treat(root, PartTimeEmployee.class);
            Predicate predicate2 = criteriaBuilder.equal(PartTimeEmployeeRoot.get("weeklySalary"), 100);
            predicates.add(criteriaBuilder.or(predicate1, predicate2));
            return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
        };

        return employeeRepository.findAll(specification, page);

    }

SQL是

在哪里 雇员。type='P' 及( 雇员。姓名=? 或雇员。周薪=100 )

我所期望的是:

在哪里 及( 雇员。姓名=? 或(雇员0.type='C'和雇员0.hourl费率<;75) )


共 (0) 个答案