簡體   English   中英

如何在Hibernate Criteria Query中使用MySQL函數

[英]How to use MySQL functions in Hibernate Criteria Query

我正在編寫一個JAVA后台作業,該作業每天在午夜附近運行,並檢查數據庫中明天將要過生日的所有人員,並向他們發送自動問候電子郵件。

我知道如何編寫本機查詢,但是很難在Hibernate Criteria查詢中編寫該查詢。 因此,我需要將本機MySQL查詢轉換為等效的JPA標准查詢。

SimpleDateFormat birthdayFormatter = new SimpleDateFormat("MMdd");
String birthDay = birthdayFormatter.format(tomorrow); 

原生查詢: 從人員WHERE DATE_FORMAT(birthday,'%m%d')= birthDay;中選擇*;

在休眠標准中,我有:

Criteria criteria = createCriteria();
criteria.add(Restrictions.eq("DATE_FORMAT(birthday, '%m%d')", birthDay));

那行不通。 我也嘗試過: Restrictions.sqlRestriction("DATE_FORMAT(birthday, '%m%d') = '" + birthDay + "'");

那也行不通..贊賞任何建議..

所以我終於從此鏈接中找到了一種方法: stackoverflow.com/questions/2345419/

我需要像這樣使用Restrictions.sqlRestriction():

條件criteria = createCriteria(); 條件.add(Restrictions.sqlRestriction(“ DATE_FORMAT({alias} .birthday,'%m%d')=?”,birthDay,StringType.INSTANCE));

這樣可行 !!

檢查下面的代碼,如何根據您的要求編寫Creteria Query

        @PersistenceContext
        EntityManager em; 

        CriteriaBuilder cb=em.getCriteriaBuilder();
        //select * from person  
        CriteriaQuery<person> qry =cb.createQuery(person.class);
        Root root = qry.from(person.class);  

        // WHERE DATE_FORMAT(birthday, '%m%d') = birthDay  
        Predicate predicate = cb.like(root.get("DATE_FORMAT"), "%"+birthday+"%");  
qry.where(predicate);

TypedQuery<person> tq = em.createQuery(qry);  
return tq.getResultList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM