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