Error No to traverse can not be null!

0

You see, I have a Medical Assistance table:

package es.makigas.hibernate.modelo;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.*;

@Entity
@Table(name="AsistenciaMedica")
public class AsistenciaMedica implements Serializable{
    public enum TipoAsistencia{
         Hospitalaria,
         Ambulatoria,
         CentroSalud,
         Domiciliaria
    }

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="idAsistenciaMedica")
    @GeneratedValue( generator = "generador_asistencia" )
    @org.hibernate.annotations.GenericGenerator(
    name = "generador_asistencia",
    strategy = "increment")
    int idAsistenciaMedica;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="id")
    Seguro seguro;

    @Column(name="breveDescripcion")
    String breveDescripcion;

    @Column(name="lugar")
    String lugar;

    @Lob
    String explicacion;

    @Enumerated(EnumType.ORDINAL)
    TipoAsistencia tipoAsistencia;

    @Temporal(TemporalType.DATE)
    Date fecha;

    @Temporal(TemporalType.TIME)
    Date hora;

    @Column(name="importe")
    BigDecimal importe;

    public AsistenciaMedica(){}

    public AsistenciaMedica(Seguro seguro, String breveDescripcion, String lugar,
            String explicacion, TipoAsistencia tipoAsistencia, Date fecha, Date hora, BigDecimal importe){
        this.seguro = seguro;
        this.breveDescripcion = breveDescripcion;
        this.lugar = lugar;
        this.explicacion = explicacion;
        this.tipoAsistencia = tipoAsistencia;
        this.fecha = fecha;
        this.hora = hora;
        this.importe = importe;
    }

    public int getIdAsistenciaMedica() {
        return idAsistenciaMedica;
    }

    public void setIdAsistenciaMedica(int idAsistenciaMedica) {
        this.idAsistenciaMedica = idAsistenciaMedica;
    }

    public Seguro getSeguro() {
        return seguro;
    }

    public void setSeguro(Seguro seguro) {
        this.seguro = seguro;
    }

    public String getBreveDescripcion() {
        return breveDescripcion;
    }

    public void setBreveDescripcion(String breveDescripcion) {
        this.breveDescripcion = breveDescripcion;
    }

    public String getLugar() {
        return lugar;
    }

    public void setLugar(String lugar) {
        this.lugar = lugar;
    }

    public TipoAsistencia getTipoAsistencia() {
        return tipoAsistencia;
    }

    public void setTipoAsistencia(TipoAsistencia tipoAsistencia) {
        this.tipoAsistencia = tipoAsistencia;
    }

    public String getExplicacion() {
        return explicacion;
    }

    public void setExplicacion(String explicacion) {
        this.explicacion = explicacion;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public Date getHora() {
        return hora;
    }

    public void setHora(Date hora) {
        this.hora = hora;
    }

    public BigDecimal getImporte() {
        return importe;
    }

    public void setImporte(BigDecimal importe) {
        this.importe = importe;
    }
}

This table I want to access those whose amount exceeds € 10,000, for which I'm going to this code:

package tests;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.management.Query;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import es.makigas.hibernate.modelo.AsistenciaMedica;
import es.makigas.hibernate.modelo.AsistenciaMedica.TipoAsistencia;
import es.makigas.hibernate.modelo.Coberturas;
import es.makigas.hibernate.modelo.Enfermedades;
import es.makigas.hibernate.modelo.NIF;
import es.makigas.hibernate.modelo.Seguro;
import es.makigas.hibernate.modelo.Seguro.Sexo;

public class TestSeguros{
    private static EntityManagerFactory emf=Persistence.createEntityManagerFactory("Persistencia");
    private static EntityManager manager=emf.createEntityManager();

    public static void main(String[] args) throws ParseException{
        SimpleDateFormat sdfFecha=new SimpleDateFormat("dd/MM/yyyy");
        sdfFecha.setLenient(false);
        SimpleDateFormat sdfHora=new SimpleDateFormat("HH:mm:ss");
        sdfHora.setLenient(false);

        Seguro seguro = new Seguro(new NIF("48573562T"),"Sara", "Tomas", "Martínez", 31, Sexo.Mujer, true, 1, true, new Coberturas(true, true, true), new Enfermedades(false, true, false, true, "Acaros"), new Date());

        AsistenciaMedica asistenciaMedica1 = new AsistenciaMedica(seguro, "Operación de miopía", "Barcelona", "El paciente es operado de miopía en los dos ojos.", TipoAsistencia.Hospitalaria, sdfFecha.parse("18/04/2013"),sdfHora.parse("08:30:00"), new BigDecimal("10400.20"));
        AsistenciaMedica asistenciaMedica2 = new AsistenciaMedica(seguro, "Analisis de alergia", "Alzira", "Se realizan analisis de sangre para determinar el tipo de alergia que padece el paciente.", TipoAsistencia.Ambulatoria, sdfFecha.parse("12/02/2012"), sdfHora.parse("18:30:00"), new BigDecimal("31.15"));
        AsistenciaMedica asistenciaMedica3 = new AsistenciaMedica(seguro, "Operación de apendicitis", "Madrid", "Extirpar el apendice del intestino grueso, el cual se habia inflamado.", TipoAsistencia.Hospitalaria, sdfFecha.parse("20/05/2013"), sdfHora.parse("13:30:00"), new BigDecimal("74.85"));

        List<AsistenciaMedica> asistencia=new ArrayList<AsistenciaMedica>();
        asistencia.add(asistenciaMedica1);
        asistencia.add(asistenciaMedica2);
        asistencia.add(asistenciaMedica3);

        seguro.setAsistenciasmedicas(asistencia);

        manager.getTransaction().begin();

        manager.persist(seguro);
        manager.persist(asistenciaMedica1);
        manager.persist(asistenciaMedica2);

        manager.getTransaction().commit();

        @SuppressWarnings("unchecked")
        List<AsistenciaMedica> a=(List<AsistenciaMedica>) manager.createQuery("grandesGastos").getResultList();
        for(AsistenciaMedica as:a)
            System.out.println(as.toString());

        manager.close();
    }
}

The big query I have stored in the file AsistenciaMedica.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>

<hibernate-mapping>
     <query name="grandesGastos"><![CDATA[
         SELECT a FROM AsistenciaMedica a where importe>10000
     ]]></query>
 </hibernate-mapping>

But when I run the program it fails and I get this error message: node to traverse can not be null! [great expenses]

What will I be doing wrong?

Edit: I've tried this code:

List<AsistenciaMedica> a=(List<AsistenciaMedica>) manager.createQuery("SELECT a FROM AsistenciaMedica a where importe>10000").getResultList();

And this does work. Clearly what happens is that the program can not find the file hbm.xml

    
asked by Miguel Alparez 26.02.2018 в 22:01
source

1 answer

0

I managed to fix it. This is the good code:

List<AsistenciaMedica> a=(List<AsistenciaMedica>) manager.createNamedQuery("grandesGastos").getResultList();

You have to put createNamedQuery instead of createQuery to work.

    
answered by 26.02.2018 в 22:22