Galera estou tentando fazer um consulta nos municipios filtrando pelo id do estado minhas entidades
@Entity
@Table(name = "municipio")
@XmlRootElement
public class Municipio implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_municipio", nullable = false)
private Integer idMunicipio;
@Column(name = "municipio", nullable = false, length = 100)
private String municipio;
@Column(name = "cd_legal", nullable = false, length = 45)
private String cdLegal;
@JoinColumn(name = "id_estado", referencedColumnName = "id_estado", nullable = false)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Estado estado;
@Entity
@Table(name = "estado")
@XmlRootElement
public class Estado implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_estado", nullable = false)
private Integer idEstado;
@Column(name = "estado", nullable = false, length = 45)
private String estado;
@Column(name = "uf", nullable = false, length = 2)
private String uf;
estou fazendo a seguinte consulta
CriteriaQuery query = getBuilder().createQuery(Municipio.class);
Root<Municipio> from = query.from(Municipio.class);
Predicate whereIdEstado = getBuilder().equal(from.get("estado.idEstado"), idEstado);
query = query.select(from).where(whereIdEstado);
return this.entityManager.createQuery(query).getResultList();
e estou tendo o seguinte erro como resposta
Caused by: java.lang.IllegalArgumentException: The attribute [estado.idEstado] from the managed type [EntityTypeImpl@15504767:Municipio [ javaType: class com.perfect.smile.entidade.Municipio descriptor: RelationalDescriptor(com.perfect.smile.entidade.Municipio --> [DatabaseTable(municipio)]), mappings: 4]] is not present.
at org.eclipse.persistence.internal.jpa.metamodel.ManagedTypeImpl.getAttribute(ManagedTypeImpl.java:147)
at org.eclipse.persistence.internal.jpa.querydef.FromImpl.get(FromImpl.java:312)
at com.perfect.smile.bo.MunicipioBO.listMunicipio(MunicipioBO.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
... 78 more
sei que o erro aconteceu por eu ter colocado no where da criteria estado.idEstado mas o que devo colocar ali entaum pois naum possu o idEstado no meu bean municipio e sim apenas o objeto municipio…
o que devo fazer…
