【问题标题】:How to write a JPA CriteriaBuilder for the query given?如何为给定的查询编写 JPA CriteriaBuilder?
【发布时间】:2020-01-17 18:44:44
【问题描述】:
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
}

【问题讨论】:

  • 显示你的代码,到目前为止你做了什么。

标签: java sql jpa


【解决方案1】:

哦!我忘了添加我正在尝试做的功能......这是我正在玩的功能:

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;

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2021-05-01
    • 2014-03-28
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多