CriteriaQuery não aplicar o argumento "Like"

Estou com um problema na linha:
alguém poderia me dizer o que pode ser?

criteriaQuery.where(criteriaBuilder.like(root.get(“descricao”), descricao + “%”));

Error: The method like(Expression, String) in the type CriteriaBuilder is not applicable for the arguments (Path, String);


import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import java.io.Serializable;
import java.util.List;

public class RamoAtividades implements Serializable {

private static final long serialVersionUID = 1L;

private EntityManager manager;

public RamoAtividades() {

}

public RamoAtividades(EntityManager manager) {
    this.manager = manager;
}

public List<RamoAtividade> pesquisar(String descricao) {
    CriteriaBuilder criteriaBuilder = manager.getCriteriaBuilder();
    
    CriteriaQuery<RamoAtividade> criteriaQuery = 
    criteriaBuilder.createQuery(RamoAtividade.class);       
    Root<RamoAtividade> root = criteriaQuery.from(RamoAtividade.class);         
    criteriaQuery.select(root);             
    criteriaQuery.where(criteriaBuilder.like(root.get("descricao"), descricao + "%"));      
    
    TypedQuery<RamoAtividade> query = manager.createQuery(criteriaQuery);
    
    return query.getResultList();
}

}

Como está definida a sua entidade RamoAtividade?

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = “ramo_atividade”)
public class RamoAtividade implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, length = 80)
private String descricao;

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	RamoAtividade other = (RamoAtividade) obj;
	if (id == null) {
		if (other.id != null)
			return false;
	} else if (!id.equals(other.id))
		return false;
	return true;
}

@Override
public String toString() {
	return "RamoAtividade [id=" + id + "]";
}

}

Tente aplicar a tipagem no get da seguinte forma:

criteriaQuery.where(criteriaBuilder.like(root.<String>get("descricao"), descricao + "%"));
1 curtida

funcionou aqui valeu