簡體   English   中英

如何在此方法中將 createCriteria(已棄用)更改為 CriteriaQuery?

[英]How can I change createCriteria (deprecated) to CriteriaQuery in this method?

codigo 是搜索項目的主鍵,在這種情況下是 estado (state)

我正在嘗試更新此代碼,它來自 hibernate 波紋管 5 版本

public class GenericDAOnew<Entidade> {
        
    private Class<Entidade> classe;
    
    @SuppressWarnings("unchecked")
    public GenericDAOnew() {
        // APIreflection
        this.classe = (Class<Entidade>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }    

    @SuppressWarnings("unchecked")
    public Entidade buscar(Long codigo){
                
        Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
                
        try {
            Criteria consulta = sessao.createCriteria(classe);
            // adicionando restricao como o where do sql
            consulta.add(Restrictions.idEq(codigo));            
            Entidade resultado = (Entidade) consulta.uniqueResult();
            return resultado;
        } catch (RuntimeException e) {
            throw e;
        } finally {
            sessao.close();
        }       
    }
} 

你可以嘗試這樣的事情:

CriteriaBuilder builder = sessao.getCriteriaBuilder();

CriteriaQuery<Entidade> criteria = builder.createQuery( classe );
Root<Entidade> root = criteria.from( classe );
criteria.select( root );
criteria.where( builder.equal( root.get( "id" ), codigo ) ); // Entidade_.id

Entidade resultado = sessao.createQuery( criteria ).getSingleResult();

如果您要使用JPA static 元模型,它允許以強類型的方式構造 Criteria 查詢,您可以將硬編碼的字段名稱"id"替換為Entidade_.id

暫無
暫無

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

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