Tenho um campo de busca onde eu procuro pelo cnpj da empresa, nome da empresa, numero do patrimonio dos equipamentos da empresa.
Ao buscar pelo cnpj ou pelo nome, funciona normalmente.
Ao buscar pelo numero do patrimonio, deparo-me com o seguinte erro:
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.MappingException: collection was not an association: br.com.projeto.entidade.Empresa.PatrimoniosCadastrados
br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:96)
br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.brb.cme.infraestrutura.interceptor.PermissaoInterceptor.intercept(PermissaoInterceptor.java:38)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:82)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
Estrutura das tabelas no banco
empresa
numero_cnpj
nome_estabelecimento
data_credenciamento
data_descredenciamento
patrimonios
numero_cnpj
numero_patrimonio
Classe Empresa
@Entity
@Table(name = "empresa", schema = "projetos")
public class Empresa {
@Id
@Column(name = "numero_cnpj")
private Long cnpj;
@Column(name = "nome_estabelecimento")
private String nome;
@ElementCollection
@CollectionTable(name = "patrimonios", schema = "projetos", joinColumns = @JoinColumn(name = "numero_cnpj"))
@Column(name = "numero_patrimonio")
private Set<String> PatrimoniosCadastrados;
@Embedded
@AttributeOverrides({ @AttributeOverride(name = "dataInicio", column = @Column(name = "data_credenciamento")),
@AttributeOverride(name = "dataFim", column = @Column(name = "data_descredenciamento")) })
private Credenciamento credenciamento;
// getters and setters
}
Classe Credenciamento
@Embeddable
public final class Credenciamento {
@Type(type = "org.joda.time.contrib.hibernate.PersistentLocalDate")
private LocalDate dataInicio;
@Type(type = "org.joda.time.contrib.hibernate.PersistentLocalDate")
private LocalDate dataFim;
// getters and setters
}
Classe com o método da pesquisa
...
@SuppressWarnings("unchecked")
public List<Empresa> pesquisa(Long cnpj, String nome, String patrimonio) {
Criteria consulta = criteria();
if (cnpj != null && cnpj > 0) {
consulta.add(Restrictions.eq("cnpj", cnpj));
}
if (nome != null && !nome.trim().isEmpty()) {
consulta.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));
}
if (patrimonio != null && !patrimonio.trim().isEmpty()) {
consulta = consulta.createAlias("PatrimoniosCadastrados", "p").add(Restrictions.in("p", new String[] { patrimonio }));
}
return consulta.list();
}
private Criteria criteria() {
return conexao.createCriteria(Empresa.class, "e");
}
...
Alguem sabe como corrigir esse erro?