Ciao a tutti.
Sto provando a fare questo esercizio:
Ho una classe Materia e la sua classe wrapper MateriaId.
La classe MateriaId contiente una sola variabile di tipo stringa "nome" con i relativi getter and setter e gli @Override di hashCode ed equals.
La classe Materia contiene le seguenti variabili
private MateriaId id = null;
private String descrizione = null;
getter, setter, hashcode ed equals e due acceleratori getNome e setNome che agiscono sull'oggetto id.
Come esercizio sto cercando di implementare un metodo che a transaction aperta, in base a determinate condizioni, interroghi la tabella.
Ho importato hibernate e sto cercando di gestire un metodo per fare una ricerca condizionata sulla tabella materia.
Dopo qualche tentativo ho implementato questo metodo che dovrebbe prendere in input un oggetto materia e restituire un oggetto List <Materia>
Questo il codice.
private List<Materia> retriveInTransaction(Materia materia) {
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Materia> criteriaQuery = builder.createQuery(Materia.class);
Root<Materia> root = criteriaQuery.from(Materia.class);
List<Predicate> predicateList = new ArrayList<Predicate>();
if(materia.getNome()!=null) {
predicateList.add(builder.like(root.get("id"),"%"+materia.getNome()+"%"));
}
if(materia.getDescrizione()!=null) {
predicateList.add(builder.like(root.get("descrizione"),"%"+materia.getDescrizione()+"%"));
}
List<Materia> result= new ArrayList<Materia>();
criteriaQuery.where(builder.and(predicateList.toArray(new Predicate[predicateList.size()])));
Query<Materia> query = session.createQuery(criteriaQuery);
result= query.list();
return result;
}
A guardare i log di hibernate le condizioni sembrano corrette ma ho eccezione sulla riga query.list();
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of percorsoPackage.MateriaId.nome
il problema se ho capito bene è che gli stoo passando id mentre lui si aspetta nome.
Potreste spiegarmi come mai query.list() mi da questa eccezione?