2016-12-26 109 views
1
final Criteria criteria = session.createCriteria(getEntityClass()); 
      criteria.add(Restrictions.eq("preview", 1)); 
      return criteria.list(); 

如何添加一个投影“case when id = 1 then'one'else'0'end as custom”;如何在Hibernate Criteria中使用CASE子句?

与此类似,

select * , case when id = 1 then 'one ' else '0' end as custom from table where preview = 1 

回答

0

我做到了在JPA接口,而无需休眠spesific classes.I希望你。我测试了我的地方,它会工作,这是工作

public static List<String> getUndeliveredPartnerRequests() throws Exception{ 

     EntityManager em = PersistenceManager.instanceEMF().createEntityManager(); 
     try { 
      CriteriaBuilder cb = em.getCriteriaBuilder(); 
      CriteriaQuery<Object[]> query = cb.createQuery(Object[].class); 
      Root<YourEntity> entityObj = query.from(YourEntity.class); 
      query.multiselect(
        cb.selectCase() 
        .when(cb.equal(entityObj.get("preview"), 1), "one") 
        .when(cb.equal(entityObj.get("preview"), 2), "two") 
        .otherwise("wrong")); 

      Query q = em.createQuery(query); 
      return q.getResultList(); 
     } finally { 
      em.close(); 
     } 
}