[RESOLVIDO] jpa - substr + ltrim

Olá Pessoal!

Tenho uma query que estava rodando certinho, porém em um campo preciso fazer tratamento e quando coloquei esse campo a query deu erro.

campo que acrescentei e comecou a dar erro: substr(ltrim(a.telemarketingPK.arqnom,‘PEGEPS’),1,2) as codEmpresa

obs.: rodei a query no query analyzer (informix) e deu certo.

[code]@Override
public List findTeste(String nomeArquivo, Long cpf, Long safra){

	String jpql = " select new TelemarketingEntity(a.data, a.qtdeRecebida, a.safra, a.qtdeErro, a.qtdeEnviadaOk, substr(ltrim(a.telemarketingPK.arqnom,'PEGEPS'),1,2) as codEmpresa, a.telemarketingPK) " +
  		" from TelemarketingEntity a, ArquivoEntity b " +
  		" where a.telemarketingPK.arqnom = b.arquivoPK.arqnom ";
	
	if(!nomeArquivo.equals("") && nomeArquivo != null ){
		jpql += " and a.telemarketingPK.arqnom = :nomeArquivo ";
	}
	if(cpf != null){
		jpql += " and b.arquivoPK.cgccpfnumdig = :cpf ";    		
	}
	if(safra != null){
		jpql += " and a.safra = :safra ";  		  
	}
	
	final Query query = this.entityManager.createQuery(jpql);
	
	if(!nomeArquivo.equals("") && nomeArquivo != null ){
		query.setParameter("nomeArquivo", nomeArquivo);
	}    	
	if(cpf != null){
		query.setParameter("cpf", cpf);
	}
	if(safra != null){
		query.setParameter("safra", safra);
	}
	
	List<TelemarketingEntity> retorno = new ArrayList<TelemarketingEntity>();
    retorno.addAll(query.getResultList());
    
    return retorno;	

} [/code]

[code]@Entity
@Table(name = “FSCMARQ”)
public class TelemarketingEntity implements java.io.Serializable {

private static final long serialVersionUID = -3872221887032117843L;

private Long arqtipcod;
private Long arqsitcod;
private Date arqdat;
private Date data; 
private Long qtdeRecebida;
private Long safra;
private Long qtdeErro;
private Long qtdeEnviadaOk;

private String codEmpresa;
	
private TelemarketingPK telemarketingPK;
		
public TelemarketingEntity(Date data, Long qtdeRecebida, Long safra,
		Long qtdeErro, Long qtdeEnviadaOk, TelemarketingPK telemarketingPK) {
	super();
	this.data = data;
	this.qtdeRecebida = qtdeRecebida;
	this.safra = safra;
	this.qtdeErro = qtdeErro;
	this.qtdeEnviadaOk = qtdeEnviadaOk;	
	this.telemarketingPK = telemarketingPK;
}

public TelemarketingEntity(Date data, Long qtdeRecebida, Long safra,
		Long qtdeErro, Long qtdeEnviadaOk, String codEmpresa,
		TelemarketingPK telemarketingPK) {
	super();
	this.data = data;
	this.qtdeRecebida = qtdeRecebida;
	this.safra = safra;
	this.qtdeErro = qtdeErro;
	this.qtdeEnviadaOk = qtdeEnviadaOk;
	this.setCodEmpresa(codEmpresa);
	this.telemarketingPK = telemarketingPK;
}



/*public TelemarketingEntity(Date data, Long qtdeRecebida, Long safra,
		Long qtdeErro, Long qtdeEnviadaOk) {
	super();
	this.data = data;
	this.qtdeRecebida = qtdeRecebida;
	this.safra = safra;
	this.qtdeErro = qtdeErro;
	this.qtdeEnviadaOk = qtdeEnviadaOk;	
}*/	

@EmbeddedId
public TelemarketingPK getTelemarketingPK() {
	return telemarketingPK;
}
public void setTelemarketingPK(TelemarketingPK telemarketingPK) {
	this.telemarketingPK = telemarketingPK;
}
	
@Column(name = "arqtipcod")
public Long getArqtipcod() {
	return arqtipcod;
}
public void setArqtipcod(Long arqtipcod) {
	this.arqtipcod = arqtipcod;
}

@Column(name = "arqsitcod")
public Long getArqsitcod() {
	return arqsitcod;
}
public void setArqsitcod(Long arqsitcod) {
	this.arqsitcod = arqsitcod;
}

@Column(name = "arqdat")
public Date getArqdat() {
	return arqdat;
}
public void setArqdat(Date arqdat) {
	this.arqdat = arqdat;
}	

@Column(name = "arqgerdat")
public Date getData() {
	return data;
}
public void setData(Date data) {
	this.data = data;
}

@Column(name = "arqregqtd")
public Long getQtdeRecebida() {
	return qtdeRecebida;
}
public void setQtdeRecebida(Long qtdeRecebida) {
	this.qtdeRecebida = qtdeRecebida;
}

@Column(name = "arqlteqtd")
public Long getSafra() {
	return safra;
}
public void setSafra(Long safra) {
	this.safra = safra;
}

@Column(name = "rcsregqtd")
public Long getQtdeErro() {
	return qtdeErro;
}
public void setQtdeErro(Long qtdeErro) {
	this.qtdeErro = qtdeErro;
}

@Column(name = "actregqtd")
public Long getQtdeEnviadaOk() {
	return qtdeEnviadaOk;
}
public void setQtdeEnviadaOk(Long qtdeEnviadaOk) {
	this.qtdeEnviadaOk = qtdeEnviadaOk;
}

public void setCodEmpresa(String codEmpresa) {
	this.codEmpresa = codEmpresa;
}

@Transient
public String getCodEmpresa() {
	return codEmpresa;
}

}[/code]

[code]@Embeddable
public class TelemarketingPK implements ICompositePrimaryKey {

private static final long serialVersionUID = 6859445788577818752L;

private Long arqcntnum;
private String arqnom;

public TelemarketingPK() {
	super();
}	
	
public TelemarketingPK(Long arqcntnum, String arqnom) {
	super();
	this.arqcntnum = arqcntnum;
	this.arqnom = arqnom;
}

@Column(name="arqcntnum")
public Long getArqcntnum() {
	return arqcntnum;
}
public void setArqcntnum(Long arqcntnum) {
	this.arqcntnum = arqcntnum;
}
@Column(name="arqnom")
public String getArqnom() {
	return arqnom;
}
public void setArqnom(String arqnom) {
	this.arqnom = arqnom;
}


@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result
			+ ((arqcntnum == null) ? 0 : arqcntnum.hashCode());
	result = prime * result + ((arqnom == null) ? 0 : arqnom.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;
	TelemarketingPK other = (TelemarketingPK) obj;
	if (arqcntnum == null) {
		if (other.arqcntnum != null)
			return false;
	} else if (!arqcntnum.equals(other.arqcntnum))
		return false;
	if (arqnom == null) {
		if (other.arqnom != null)
			return false;
	} else if (!arqnom.equals(other.arqnom))
		return false;
	return true;
}

}[/code]

Estou tentando aqui, mais se alguem puder me ajudar.
Agradeço desde já!

JPQL é diferente de SQL. Por isso que você está tendo esse erro.

Esse post mostra como usar JPQL e suas funções corretamente: http://uaihebert.com/?p=1137

Obrigada Herbert.

Eu consegui resolver, porém fazendo tratamento após busca no banco. Trouxe o campo inteiro e tratei no retorno.

Iri lê a sua indicação, pois é a primeira vez em JPQL e to apanhando em alguma coisas.

Valeu