Fehler bei SQL Abfrage MAX

  • Themenstarter Themenstarter EJB3.0User
  • Beginndatum Beginndatum
E

EJB3.0User

Gast
Hallo ich bekommen folgenden Fehler wenn ich versuche diese Abfrage zu starten :

Java:
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: wa_pos is not mapped [SELECT MAX(schein_nr) FROM wa_pos]

Java:
Query query = manager.createQuery("SELECT MAX(schein_nr) FROM wa_pos");
        @SuppressWarnings("unchecked")
        Long result = Long.parseLong(query.getSingleResult().toString());
        return result+1;


Danke🙂
 
Zuletzt bearbeitet von einem Moderator:
ok, hab ein abbild gemacht von der Tabelle die Entity heißt :

WaPos 🙂

Java:
        Query query = manager.createQuery("SELECT * FROM wa_kopf");
        @SuppressWarnings("unchecked")
        List<WaKopf> kopf = query.getResultList();
        long retVal = 0;
        for(WaKopf _kopf : kopf){
        	if(retVal < _kopf.getPk().getScheinNr()){
        	   retVal = _kopf.getPk().getScheinNr();
        	}
        	
        }
        return retVal;

Java:
unexpected token: * near line 1, column 8 [SELECT * FROM wa_kopf]

ich versteh EJB 3.0 noch nicht ganz🙁 (Azubi 🙂 )
 
Java:
@Entity
@Table(name = "WA_KOPF")
public class WaKopf implements Serializable {
    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private Pk pk;

    @Column(name = "BUCHUNGSSCHLUESSEL")
    private String buchungsSchluessel;

    @Column(name = "TEXT")
    private String text;

    @Column(name = "BEARB_DATUM")
    @Temporal(TemporalType.TIMESTAMP)
    private Date bearbDatum;

    @Column(name = "BEARB_BENUTZER")
    private String bearbBenutzer;

    @Column(name = "GESELLSCHAFT")
    private Long gesellschaft;

    @Column(name = "KD_NR")
    private Long kdNr;

    @Column(name = "MDEFT")
    private Long mdeft;
    
    public WaKopf() {
    }
    
    public Pk getPk() {
        return pk;
    }

    public void setPk(Pk pk) {
        this.pk = pk;
    }

    public String getBuchungsSchluessel() {
        return buchungsSchluessel;
    }

    public void setBuchungsSchluessel(String buchungsSchluessel) {
        this.buchungsSchluessel = buchungsSchluessel;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Date getBearbDatum() {
        return bearbDatum;
    }

    public void setBearbDatum(Date bearbDatum) {
        this.bearbDatum = bearbDatum;
    }

    public String getBearbBenutzer() {
        return bearbBenutzer;
    }

    public void setBearbBenutzer(String bearbBenutzer) {
        this.bearbBenutzer = bearbBenutzer;
    }

    public Long getGesellschaft() {
        return gesellschaft;
    }

    public void setGesellschaft(Long gesellschaft) {
        this.gesellschaft = gesellschaft;
    }

    public Long getKdNr() {
        return kdNr;
    }

    public void setKdNr(Long kdNr) {
        this.kdNr = kdNr;
    }

    public Long getMdeft() {
        return mdeft;
    }

    public void setMdeft(Long mdeft) {
        this.mdeft = mdeft;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((pk == null) ? 0 : pk.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        WaKopf other = (WaKopf) obj;
        if (pk == null) {
            if (other.pk != null)
                return false;
        } else if (!pk.equals(other.pk))
            return false;
        return true;
    }



    @Embeddable
    public static class Pk implements Serializable {
        private static final long serialVersionUID = 1L;

        @Column(name = "MANDANT")
        private Long mandant;

        @Column(name = "SCHEIN_NR")
        private Long scheinNr;

        public Pk() {
        }

        public Long getMandant() {
            return mandant;
        }

        public void setMandant(Long mandant) {
            this.mandant = mandant;
        }

        public Long getScheinNr() {
            return scheinNr;
        }

        public void setScheinNr(Long scheinNr) {
            this.scheinNr = scheinNr;
        }

        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((mandant == null) ? 0 : mandant.hashCode());
            result = prime * result + ((scheinNr == null) ? 0 : scheinNr.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Pk other = (Pk) obj;
            if (mandant == null) {
                if (other.mandant != null)
                    return false;
            } else if (!mandant.equals(other.mandant))
                return false;
            if (scheinNr == null) {
                if (other.scheinNr != null)
                    return false;
            } else if (!scheinNr.equals(other.scheinNr))
                return false;
            return true;
        }
    }

}

Danke für die Hilfe🙂
 
"Select *" gibts in HQL nicht und du musst die Entity angeben, nicht die SQL-Tabelle,
gar keine Grundlagen bekannt?

Query query = manager.createQuery("FROM WaKopf");
 
mh ne .. eher nicht 🙂 , wenn ihr was zum nachlesen habt gerne🙂

hab das jetzt so...



Java:
org.hibernate.hql.ast.QuerySyntaxException: Wa_Kopf is not mapped [FROM Wa_Kopf]

Java:
        Query query = manager.createQuery("FROM Wa_Kopf");
        @SuppressWarnings("unchecked")
        List<WaKopf> kopf = query.getResultList();
        long retVal = 0;
        for(WaKopf _kopf : kopf){
        	if(retVal < _kopf.getPk().getScheinNr()){
        	   retVal = _kopf.getPk().getScheinNr();
        	}
        }
        return retVal;
 
ich sage dir vor
> Query query = manager.createQuery("FROM WaKopf");
und erzähle dir im Text haargenau "du musst die Entity angeben, nicht die SQL-Tabelle"

und du schreibst immer noch
> Query query = manager.createQuery("FROM Wa_Kopf");
und wunderst dich über die Exception?
Respekt, das muss man erstmal hinbekommen
 
Nein, deine Entity heißt, standardmäßig wie deine Klasse --> WaKopf
Diese Entity wird in der Tabelle (@Table) WA_KOPF gespeichert.

Da man mit dem Query createQuery die JPA Query Language (mir fällt gerade die korrekte Abkürzung nicht ein) benutzt, bezieht man sich hier auf Namen der Entities und nicht der Tabellen, in deinem Fall also WaKopf.

Edit: An deiner Stelle würde ich mal nach JPA Tutorials googlen und dir diese zu gemüte führen.
 
wonach richtet sich denn, wie eine Entiy heißt?
gut das mag Definitionsache sein, aber wenn ich schon explizit hinschreibe, dass es was anderes als der SQL-Tabellennamen sein soll
und wenn ich super-eindeutig sage, dass du "FROM WaKopf" als Query schreiben sollst, dann ist doch wohl mehr als sonnenklar,
dass ich als EntityName WaKopf ansehe, und wie auch immer diese nebensächliche Seitendiskussion ausgeht,
du musst "FROM WaKopf" schreiben

meine Güte
 

Zurück
Oben