Problema com addOrder hibernate

Boa tarde a todos , estou com um estranho problema no metodo addOrder na api Criteria o oracle fica lançando ORA-02393: exceeded call limit on CPU usage estou usando o hibernate 4.1.4 e Oracle 11g express edition , abaixo segue os mapeamentos

public class Atendido {

	@Id
	@GeneratedValue
	@Column(name = "ID")
	private Long id;

	@OneToOne(fetch = FetchType.LAZY, cascade = { javax.persistence.CascadeType.ALL })
	@JoinColumn(name = "ID_PESSOA_FISICA")
	private PessoaFisica pessoaFisica;

	@OneToOne(fetch = FetchType.LAZY, cascade = { javax.persistence.CascadeType.ALL })
	@JoinColumn(name = "ID_PESSOA_JURIDICA")
	private PessoaJuridica pessoaJuridica;

	@OneToMany(fetch = FetchType.LAZY, cascade = { javax.persistence.CascadeType.ALL }, orphanRemoval = true)
	@BatchSize(size = 50)
	@JoinColumn(name = "ID_ATENDIDO")
	private List<RgCriminal> rgs;

        .
        .
        //getters and setters

}
public class PessoaFisica {

	@Id
	@GeneratedValue
	@Column(name = "ID")
	private Long id;
	
	@Column(name = "NOME_PAI")
	private String nomePai;

	@Column(name = "NOME_NASCIMENTO")
	private String nomeNascimento;

	@Column(name = "NOME_MAE")
	private String nomeMae;

	@Column(name = "NOME_SOCIAL")
	private String nomeSocial;

	
        .
        .
        //getters and setters

}
public class PessoaJuridica {

	@Id
	@GeneratedValue
	@Column(name = "ID")
	private Long id;

	@Column(name = "RAZAO_SOCIAL")
	private String razaoSocial;

	@Column(name = "NOME_FANTASIA")
	private String nomeFantasia;	
	
	@Column(name = "REPRESENTANTE_LEGAL")
	private String representanteLegal;

        .
        .
        //getters and setters
	
}
public class RgCriminal {

	@Id
	@GeneratedValue
	@Column(name = "ID")
	private Long id;

	@Column(name = "RG_CRIMINAL")
	private String rgCriminal;
  
        .
        .
        //getters and setters

}

e tenho o seguinte metodo que faz a busca :

@SuppressWarnings("unchecked")
	private List<Atendido> listAll(String term, Integer firstResult,
			Integer maxResults) throws ParseException {
		Criteria criteria = this.session.createCriteria(Atendido.class);
		criteria.createCriteria("pessoaFisica", "pessoaFisica",
				JoinType.LEFT_OUTER_JOIN);
		criteria.createCriteria("pessoaJuridica", "pessoaJuridica",
				JoinType.LEFT_OUTER_JOIN);
		criteria.createCriteria("rgs", "rg", JoinType.LEFT_OUTER_JOIN);

	
			Disjunction or = Restrictions.disjunction();
			for (String token : term.split(";")) {
				token = token.trim();
				if (!StringUtils.isEmpty(token)) {
					       //my.Restrictions é um criterion que fiz pra procurar ignorando acentos a classe tambem segue mais abaixo
						or.add(my.Restrictions
								.ilike("pessoaFisica.nomeNascimento", token,
										MatchMode.ANYWHERE));
						or.add(my.Restrictions
								.ilike("pessoaFisica.nomeSocial", token,
										MatchMode.ANYWHERE));
						or.add(my.Restrictions
								.ilike("pessoaJuridica.nomeFantasia", token,
										MatchMode.ANYWHERE));
						or.add(my.Restrictions
								.ilike("pessoaJuridica.razaoSocial", token,
										MatchMode.ANYWHERE));
						or.add(my.Restrictions
								.ilike("pessoaJuridica.representanteLegal",
										token, MatchMode.ANYWHERE));
						or.add(my.Restrictions
								.ilike("pessoaFisica.nomeMae", token,
										MatchMode.ANYWHERE));
					} 
				}
		criteria.add(or);
		if (firstResult != null && maxResults != null) {
			criteria.setFirstResult(firstResult).setMaxResults(maxResults);
		} else if (maxResults == null) {
			criteria.setMaxResults(50);
		} else {
			criteria.setMaxResults(maxResults);
		}

		/* se eu comento esse bloco a query executa em 2 segundos , se eu descomento esse bloco oracle retorna ORA-02393: exceeded call limit on CPU pois a execução salta pra mais de 20 segundos . Sera algum tipo de bug ?
		criteria.addOrder(Order.asc("pessoaFisica.nomeMae"));
		criteria.addOrder(Order.asc("pessoaFisica.nomeNascimento"));
		criteria.addOrder(Order.asc("pessoaJuridica.razaoSocial"));
		 */
		return criteria.list();

	}
package br.gov.sp.defensoria.common.hibernate.criterion;

import org.hibernate.Criteria;

import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.MatchMode;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.spi.TypedValue;

import br.gov.sp.defensoria.common.util.StringUtil;

public class LikeExpression implements Criterion {
	private static final long serialVersionUID = 1L;
	private final String propertyName;
	private final Object value;
	private final Character escapeChar;
	private final boolean ignoreCase;

	public LikeExpression(String propertyName, String value,
			Character escapeChar, boolean ignoreCase) {
		this.propertyName = propertyName;
		this.value = value;
		this.escapeChar = escapeChar;
		this.ignoreCase = ignoreCase;
	}

	protected LikeExpression(String propertyName, String value) {
		this(propertyName, value, null, false);
	}

	protected LikeExpression(String propertyName, String value,
			MatchMode matchMode) {
		this(propertyName, matchMode.toMatchString(value));
	}

	protected LikeExpression(String propertyName, String value,
			MatchMode matchMode, Character escapeChar, boolean ignoreCase) {
		this(propertyName, matchMode.toMatchString(value), escapeChar,
				ignoreCase);
	}

	public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
			throws HibernateException {
		String searchFor = "áàâãªéèêóòôõºúùûçÁÀÂÃÉÈÊÓÒÔÕÚÙÛÇ";
		String replaceTo = "aaaaaeeeooooouuucaaaaeeeoooouuuc";
		Dialect dialect = criteriaQuery.getFactory().getDialect();
		String[] columns = criteriaQuery.findColumns(propertyName, criteria);
		if (columns.length != 1) {
			throw new HibernateException(
					"Like may only be used with single-column properties");
		}
		String escape = escapeChar == null ? "" : " escape \'" + escapeChar
				+ "\'";
		String column = columns[0];

		if (ignoreCase) {
			if (dialect.supportsCaseInsensitiveLike()) {
				return "translate(" + column + ",'" + searchFor + "','"
				+ replaceTo + "')" + dialect.getCaseInsensitiveLike() + " ?"
						+ escape;
			} else {
				return dialect.getLowercaseFunction() + '(' + "translate(" + column + ",'" + searchFor + "','"
				+ replaceTo + "')" + ')'
						+ " like ?" + escape;
			}
		} else {
			return "translate(" + column + ",'" + searchFor + "','"
					+ replaceTo + "') like ?" + escape;
		}
	}

	public TypedValue[] getTypedValues(Criteria criteria,
			CriteriaQuery criteriaQuery) throws HibernateException {
		return new TypedValue[] { criteriaQuery.getTypedValue(
				criteria,
				propertyName,
				ignoreCase ? StringUtil.removeAccentuation(value.toString()
						.toLowerCase()) : StringUtil.removeAccentuation(value
						.toString())) };
	}
}
package br.gov.sp.defensoria.common.hibernate.criterion;

import org.hibernate.criterion.Criterion;

import org.hibernate.criterion.MatchMode;

public class Restrictions {	
	public static Criterion ilike(String propertyName, String value,MatchMode matchMode) {
		return new LikeExpression(propertyName, value, matchMode, null, true);
	}
}

Minha tabela onde a busca é ralizada contém mais de 400.000 registros e só tende a crescer . Alguem ja sofreu esse tipo de problema ? Ou tem alguma luz do que seja ?

Olá, não sei do que se tratá seu projeto, mas não teria como você usar limites para visualização?

Se eu não me engano, o criteria tem uns métodos para limitar a quantidade de resultado buscados. Assim você pode trazer a lista com 100, depois mais 100…assim por diante, pois acredito que você não deva exibir mais de 400 mil linha em uma exibição, seja ela desktop ou web.

[quote=iamthelegend]Olá, não sei do que se tratá seu projeto, mas não teria como você usar limites para visualização?

Se eu não me engano, o criteria tem uns métodos para limitar a quantidade de resultado buscados. Assim você pode trazer a lista com 100, depois mais 100…assim por diante, pois acredito que você não deva exibir mais de 400 mil linha em uma exibição, seja ela desktop ou web.[/quote]

ja esta limitando no metodo que faz a busca , isso ta ok

//trecho
else if (maxResults == null) {  
            criteria.setMaxResults(50);
}

o problema é quando adiciono os metodos addOrder demora muito pra executar , se eu removo responde rapido . Atraves de jdbc puro isso nao acontece . ele responde normal mesmo com os orders na query.

Hum entendi. Nunca tive esse problema.

Será que não existe algo para ser feito no hibernate.cfg?

Talvez exista algo que trate isso. É onde eu iria buscar uma solução.

[quote=iamthelegend]Hum entendi. Nunca tive esse problema.

Será que não existe algo para ser feito no hibernate.cfg?

Talvez exista algo que trate isso. É onde eu iria buscar uma solução.[/quote]

é a primeira vez que vejo isso acontecer tambem , problema muito estranho . Em ultimo caso vou ter que partir pra procedure ou utilizar jdbc puro mesmo , uma pena .