Criteria com mapeamento ManyToMany

2 respostas
ddark.emanu

Bom dia galera, estou com o seguinte problema , Tenho uma Classe Representante e uma Classe Cliente, dentro da classe Cliente tem um List de Representantes com o mapeamento ManyToMany e quando vou realizar a busca dos clientes (Criteria) do representante logado retorna o erro que a propriedade representante não existe em Cliente

Obs:CLIENTES_REPRESENTANTES é uma VIEW , com os atributos representante e cliente , que são as chaves

Classe Cliente

@Entity
@Table(name = "CLIENTES")
@Inheritance(strategy = TABLE_PER_CLASS)
public class Cliente extends PessoaJuridica {
...
@ManyToMany
	@JoinTable(joinColumns = @JoinColumn(name = "cliente", referencedColumnName = "codigo"), 
			inverseJoinColumns = @JoinColumn(name = "representante", referencedColumnName = "codigo"))
	public List<Representante> getRepresentantes() {
		return representantes;
	}
...

Classe Representante

@Entity
@Table(name = "REPRESENTANTES")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Representante extends PessoaJuridica {
...
@ManyToMany
	@JoinTable(name = "CLIENTES_REPRESENTANTES", 
			joinColumns = @JoinColumn(name = "representante", referencedColumnName = "codigo"), 
			inverseJoinColumns = @JoinColumn(name = "cliente", referencedColumnName = "codigo"))
	public List<Cliente> getClientes() {
		return clientes;
	}
...

Criteria

Criteria criteria = ComandoUtil.getSessionExtranet().createCriteria(Contrato.class);
Criteria criteriaClientes = ComandoUtil.getSessionExtranet().createCriteria(Cliente.class);
				criteriaClientes.setProjection(Property.forName("codigo"));
				criteriaClientes.createAlias("representante", "r");
				criteriaClientes.add(Restrictions.eq("r.codigo", usuario.getPessoa().getCodigo()));
				
				criteria.createAlias("usuario", "u");
				criteria.add(Restrictions.in("u.pessoa.codigo", criteriaClientes.list()));

ERRO

Caused by: org.hibernate.QueryException: could not resolve property: representante of: br.com.sistema.model.Cliente
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:61)
	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1385)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathEntityName(CriteriaQueryTranslator.java:227)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:214)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.<init>(CriteriaQueryTranslator.java:104)
	at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:82)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1577)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)

2 Respostas

MarceloNeo

E Emanu resolveu seu problema…
estou com um problemas semelhante ao seu…

ddark.emanu

Resolvi fazendo a classe CLIENTES_REPRESENTANTES

Criado 21 de maio de 2011
Ultima resposta 26 de jul. de 2011
Respostas 2
Participantes 2