Как написать JPA CriteriaBuilder для данного запроса? - PullRequest
0 голосов
/ 17 января 2020
SELECT * FROM Emp_Main WHERE status = 'QUIT' AND to_Char(effective_date,'YYYY')= '2018';

В этом примере я жестко запрограммировал «2018». Но в реальном коде это переменная :year. Также у меня есть Java модель EmpMain, как это:

@Entity
@Table(name="EMP_MAIN")
public class EmpMain implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EMP_MAIN_SEQ")
    @SequenceGenerator(sequenceName = "EMP_MAIN_S", allocationSize = 1, name = "EMP_MAIN_SEQ")
    @Column(name="EMP_ID")
    private long empId;

        @Temporal(TemporalType.DATE)
    @Column(name="EFFECTIVE_DATE")
    private Date effectiveDate;
    enter code here
        @Column(name="STATUS")
    private String status;

        //Getters and Setters
}

1 Ответ

0 голосов
/ 19 января 2020

О! Я забыл добавить свою функцию, которую пытаюсь сделать .... и вот функция, с которой я играю:

public List<EmpMain> getQuitEmployeesByYear(String inputYear)
{
  List<EmpMain> listOfEmployees = null;
  CriteriaBuilder builder = entityManager.getCriteriaBuilder();
  CriteriaQuery<EmpMain> query = builder.createQuery(EmpMain.class);

  Root<EmpMain> root = query.from(EmpMain.class);

  Predicate statusPredicate = builder.equal(root.get("status"), "QUIT");


  Expression<String> expression = builder.function(
                             "to_char", String.class, 
                             root.get("effectiveDate"), "YYYY",
                             builder.parameter(String.class, inDate));

  query.select(root).where(builder.and(statusPredicate, expression));

  listOfEmployees = query.setParameter("inDate", 
                            inputDate).getSingleResult();

  return listOfEmployees;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...