[Hibernate] Queries extremamente lentas ( Problemas relacionamentos )

0 respostas
P

Fala feras :smiley:

Tenho as entidades Associacao, Usuario, Talao e elas se relacionamento da seguinte forma:

1 Usuario - N Associacao
1 Associacao - 1 Talao

Existem 3 tipos de usuário e cada usuário, pode ter alguns determinados registros na tabela associação…por causa disso, criei o seguinte mapeamento:

UsuarioTO

@OneToMany(mappedBy="usuarioCadastro", fetch=FetchType.LAZY)
	private Collection<AssociacaoTO> associacoesCadastro;
	
	
	@OneToMany(mappedBy="usuarioSupervisor", fetch=FetchType.LAZY)
	private Collection<AssociacaoTO> associacoesSupervisor;
	
	@OneToMany(mappedBy="usuarioOperador", fetch=FetchType.LAZY)
	private Collection<AssociacaoTO> associacoesOperador;

AssociacaoTO

@ManyToOne()
	@JoinColumn(name="ID_USUARIO_CADASTRO")
	private UsuarioTO usuarioCadastro;
	
	@ManyToOne()
	@JoinColumn(name="ID_USUARIO_OPERADOR")
	private UsuarioTO usuarioOperador;
	
	@ManyToOne()
	@JoinColumn(name="ID_USUARIO_SUPERVISOR")
	private UsuarioTO usuarioSupervisor;

	@OneToOne()
	@JoinColumn(name="ID_TALAO")
	private TalaoTO talaoTO;

TalaoTO

@OneToOne(mappedBy = "talaoTO", fetch=FetchType.LAZY)
	@Cascade(value = {CascadeType.PERSIST})
	private AssociacaoTO associacaoTO;

O problema é que quando vou buscar um registro de associacao por um determinado parâmetro ( ex.: por mês ), ele retorna em torno de 6 a 7 mil registro e para cada registro, ele começa a buscar todos os relacionamentos e isso esta tornando o sistema inviável para utilização.

Um método que demora demais, é o seguinte:

AssociacaoDAOImpl

public Collection<AssociacaoTO> buscarRegistrosMesVenda(String mesAno) {
		Collection<AssociacaoTO> taloesVendidos = new ArrayList<AssociacaoTO>();
		session = InitSessionFactory.getInstance().getCurrentSession();
		Transaction tx = session.beginTransaction();
		StringBuilder sql = new StringBuilder("SELECT * FROM associacao WHERE LEFT(ASSOCIACAO.DT_DEVOLUCAO_SUPERVISOR, 7) = '" + mesAno + "'");
		Query query = session.createSQLQuery(sql.toString()).addEntity(AssociacaoTO.class);
		taloesVendidos = query.list();
		tx.commit();
		return taloesVendidos;
	}

Qual a melhor maneira de ajustar isso? Se eu remover os relacionamentos, funciona mas ai teria que mudar toda a implementação feita até hoje. Tem alguma outra opção?

PS.: O principal relacionamento problematico é esse 1-1.

Obrigado.

Criado 21 de agosto de 2009
Respostas 0
Participantes 1