[RESOLVIDO] jpa - substr + ltrim

3 respostas
I

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.

@Override
public List<TelemarketingEntity> 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;	
  	
}
@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;
	}

}
@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;
	}
	
}

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

3 Respostas

Hebert_Coelho

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

Hebert_Coelho

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

I

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

Criado 23 de abril de 2013
Ultima resposta 24 de abr. de 2013
Respostas 3
Participantes 2