1

I have a stored procedure that returns a result of 4 fields: longitude numeric, latitude numeric, coor_xy geometry(Point,2154) and message character varying. I'm using a PostgresSQL as an SGBD.

In Java, so that I can retrieve the result, I created a class ResultCalcul that contains 4 attributes like that :

public class ResultatCalcul {

    private BigDecimal longitude;
    private BigDecimal latitude;
    private Point coordonnees;
    private String message;

    public BigDecimal getLongitude() {
        return longitude;
    }

    public void setLongitude(BigDecimal longitude) {
        this.longitude = longitude;
    }

    public BigDecimal getLatitude() {
        return latitude;
    }

    public void setLatitude(BigDecimal latitude) {
        this.latitude = latitude;
    }

    public Point getCoordonnees() {
        return coordonnees;
    }

    public void setCoordonnees(Point coordonnees) {
        this.coordonnees = coordonnees;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

The function that uses the stored procedure is as follows:

public ResultatCalcul extrapolerPosition(SuiviMissionType messageSMission){
    String sqlString = "select longitude as longitude, latitude as latitude, coor_xy as coor, message as message "
            + "from pk_soclelocalisation_enrichi.fu_extrapoler_position(?,?,?,?)";
    Query query = em.createNativeQuery(sqlString);
    org.hibernate.SQLQuery hq = (org.hibernate.SQLQuery) ((org.hibernate.ejb.HibernateQuery) query).getHibernateQuery();
    hq.setString(0, (messageSMission.getNumeroTrain() != null)? messageSMission.getNumeroTrain():"");
    hq.setString(1, messageSMission.getGarePrecedente().getCodeTT20());
    hq.setString(2, (messageSMission.getGareSuivante() != null)?messageSMission.getGareSuivante().getCodeTT20():"");
    hq.setDouble(3, messageSMission.getGarePrecedente().getDistanceGare());
    hq.addScalar("longitude", new BigDecimalType());
    hq.addScalar("latitude", new BigDecimalType());
    hq.addScalar("coor", new GeometryType().INSTANCE);
    hq.addScalar("message", new StringType());
    ResultatCalcul resultat = (ResultatCalcul) hq.uniqueResult();
    return resultat;
}

When I executed in debug, I have an error java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to MyPackage.ResultatCalcul in line ResultatCalcul resultat = (ResultatCalcul) hq.uniqueResult();

How can i solve it ?

youssef
  • 159
  • 3
  • 13

0 Answers0