Pessoal,
Estou usando o JPA com hibernate e não estou conseguindo fazer uma busca filtrando por um campo que tem relacionamento.
tenho a seguinte entidade:
@Entity
public class MaquinaServico implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id", nullable = false)
private Long id;
@JoinColumn(name = "id_maquina", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false)
private Maquina idMaquina;
@JoinColumn(name = "id_servico", referencedColumnName = "id", nullable = false)
@ManyToOne(optional = false)
private Servico idServico;
// gets and sets
}
E a seguinte consulta funciona:
public boolean teste(Maquina maquina, Servico servico) {
String query = "SELECT m FROM MaquinaServico m where m.id = :Maquina ";
Query q = getEntityManager().createQuery(query);
q.setParameter("Maquina", 1L);
return (q.getResultList().size() > 0 ? true : false);
}
Mas se fizer a mesma consulta so que com o where o campo idMaquina da erro:
public boolean teste(Maquina maquina, Servico servico) {
String query = "SELECT m FROM MaquinaServico m where m.idMaquina = :Maquina ";
Query q = getEntityManager().createQuery(query);
q.setParameter("Maquina", 1L);
return (q.getResultList().size() > 0 ? true : false);
}
erro:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of bit.entidade.Maquina.id
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:637)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:74)
at bit.dao.impl.MaquinaServicoDaoImpl.teste(MaquinaServicoDaoImpl.java:47)
at bit.service.MaquinaService.TemServico(MaquinaService.java:42)
at Main.main(Main.java:29)
Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of bit.entidade.Maquina.id
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:35)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3591)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3307)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:218)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:87)
at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65)
... 3 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field bit.entidade.Maquina.id to java.lang.Long
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18)
at java.lang.reflect.Field.get(Field.java:358)
at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:32)
... 24 more
Java Result: 1
Alguém tem alguma ideia ?
Obrigado,
Marcelo Gomes