Ich sitz seit gestern vor diesem Problem und hab schon an vielen Stellen nach Lösungen gesucht, aber nichts passendes gefunden. Um bei der Datenbank-Anbindung auf Hibernate umzustellen, hab ich ein vorhandenes SQL-Statement in ein HQL-Statement angepasst.
Abfrage via Hibernate mit loadAll(User.class); funktiert, nur dieses jetzt nicht.
Mein HQL-Statement sieht so aus:
Code:
public List<User> getWarnungen(String name){
return getHibernateTemplate().findByNamedParam(
"select u.uname, count(m.mid) as warn
FROM Meldungen as m, MeldungInfo as mi, User as u
WHERE m.uid=u.id AND u.uname=:name AND m.mid=mi.id AND mi.typ=2
group by uid", "name", name);
}
Und daraus wird dann:
Code:
Hibernate:
select
user2_.uname as col_0_0_,
count(meldungen0_.mid) as col_1_0_
from
meldungen meldungen0_,
meldungen-info meldunginf3_, //Woher kommt das?
meldungen-info meldunginf1_,
user user2_
where
meldungen0_.mid=meldunginf3_.id //Woher kommt das?
and meldungen0_.uid=user2_.id
and user2_.uname=?
and meldungen0_.mid=meldunginf1_.id
and meldunginf1_.typ=2
group by
uid
Hängt das eventuell an meinem Mapping?
Wenn ja, könnte ich was aus dem HQL-Statement weglassen oder kann ich das Mapping weglassen?
Mapping in Meldungen.java:
Code:
[...]
public class Meldungen implements Serializable {
private Integer id;
private Date timestamp;
private User uid;
private MeldungInfo mid;
public Meldungen(){
}
[...]
@OneToOne
@JoinColumn(name="mid")
public MeldungInfo getMid() {
return mid;
}
[...]
}
Oder ist mein Mapping falsch?
Wäre über Hilfe dankbar.
Edit: ich kann die Anwendung starten, aber wenn ich Methode getWarnungen() aufrufe wird das HQL in SQL umgewandelt aber ich erhalte folgende Fehlermeldung:
Quote:
MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-info meldunginf3_, meldungen-info meldunginf1_, user user2_ where meldungen0_.m' at line 1
Deswegen ist mir das mit der "falschen" Umwandlung auch erst aufgefallen