Hi,
wie im Titel schon erwähnt geht es um eien Suchabfrage über die Hibernate-Criteria.
Die Suchabfrage soll mir alle Mitarbeiter ausgeben die eine bestimmte Projektrolle in einem Projekt schon einmal eingenommen haben.
Hier der SQL-Befehl dazu:
[highlight=SQL]select vorname, nachname from MITARBEITER m, MITARBEITER_HAS_PROJEKT mhp
where mhp.PROJEKTROLLE_PRID = 1
and mhp.MITARBEITER_MID = m.MID[/highlight]
In der Hibernate-Klasse vom Mitarbeiter habe ich vollgende Verbindung zu Mitarbeiter_Has_Projekt:
[highlight=Java] @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "MITARBEITER_HAS_PROJEKT", schema = "AZUBI", joinColumns = { @JoinColumn(name = "MITARBEITER_MID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "PROJEKT_PID", nullable = false, updatable = false) })
public Set<Projekt> getProjekts() {
return this.projekts;
}
public void setProjekts(Set<Projekt> projekts) {
this.projekts = projekts;
}[/highlight]
Diese bringt mir leider nichts, da ich wenn ich "createCriteria oder createAlias" benutze immer auf die Projekt-Klasse weitergeleitet werde, was ich schon nicht verstehe.
Momentan sieht meine Criteria Abfrage so aus:
[highlight=Java] Example productExample = Example.create(mitarbeiterSuche)
.ignoreCase().excludeZeroes().enableLike();
DetachedCriteria suchErgebnis = DetachedCriteria.forClass(
Mitarbeiter.class, "m").add(productExample);
if (mitarbeiterSuche.getRolle() != null) {
suchErgebnis.createCriteria("projekts",
CriteriaSpecification.INNER_JOIN).add(
Restrictions.eq("mhp.PROJEKTROLLE_PRID",
mitarbeiterSuche.getRolle().getMptid()))
.add(
Restrictions.eq("mhp.MITARBEITER_MID",
"m.MID"));
}[/highlight]
Bis auf dei Suche nach Projektrolle klappt dieser Befehl!
Bei Projektrolle kriege ich folgende Fehlermeldung:
[highlight=Java]org.hibernate.QueryException: could not resolve property: mhp of: de.prodv.pris.model.Projekt
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)[/highlight]
So meine Frage ist wieso geht er überhaupt auf die Projektklasse und wie kann ich meine gewünschte SQL-Abfrage über Criteria abfragen. Ich habe schon mehrfach gegoogelt aber nichts gefunden was mit weiterhelfen könnte. (Geht so etwas überhaupt über Criteria)
Ich hoffe ich konnte mein Problem deutlich machen und es kann mir jemand Helfen.
Danke schonmal im vorraus
Mit freundlichen Grüßen
Oliver
wie im Titel schon erwähnt geht es um eien Suchabfrage über die Hibernate-Criteria.
Die Suchabfrage soll mir alle Mitarbeiter ausgeben die eine bestimmte Projektrolle in einem Projekt schon einmal eingenommen haben.
Hier der SQL-Befehl dazu:
[highlight=SQL]select vorname, nachname from MITARBEITER m, MITARBEITER_HAS_PROJEKT mhp
where mhp.PROJEKTROLLE_PRID = 1
and mhp.MITARBEITER_MID = m.MID[/highlight]
In der Hibernate-Klasse vom Mitarbeiter habe ich vollgende Verbindung zu Mitarbeiter_Has_Projekt:
[highlight=Java] @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "MITARBEITER_HAS_PROJEKT", schema = "AZUBI", joinColumns = { @JoinColumn(name = "MITARBEITER_MID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "PROJEKT_PID", nullable = false, updatable = false) })
public Set<Projekt> getProjekts() {
return this.projekts;
}
public void setProjekts(Set<Projekt> projekts) {
this.projekts = projekts;
}[/highlight]
Diese bringt mir leider nichts, da ich wenn ich "createCriteria oder createAlias" benutze immer auf die Projekt-Klasse weitergeleitet werde, was ich schon nicht verstehe.
Momentan sieht meine Criteria Abfrage so aus:
[highlight=Java] Example productExample = Example.create(mitarbeiterSuche)
.ignoreCase().excludeZeroes().enableLike();
DetachedCriteria suchErgebnis = DetachedCriteria.forClass(
Mitarbeiter.class, "m").add(productExample);
if (mitarbeiterSuche.getRolle() != null) {
suchErgebnis.createCriteria("projekts",
CriteriaSpecification.INNER_JOIN).add(
Restrictions.eq("mhp.PROJEKTROLLE_PRID",
mitarbeiterSuche.getRolle().getMptid()))
.add(
Restrictions.eq("mhp.MITARBEITER_MID",
"m.MID"));
}[/highlight]
Bis auf dei Suche nach Projektrolle klappt dieser Befehl!
Bei Projektrolle kriege ich folgende Fehlermeldung:
[highlight=Java]org.hibernate.QueryException: could not resolve property: mhp of: de.prodv.pris.model.Projekt
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)[/highlight]
So meine Frage ist wieso geht er überhaupt auf die Projektklasse und wie kann ich meine gewünschte SQL-Abfrage über Criteria abfragen. Ich habe schon mehrfach gegoogelt aber nichts gefunden was mit weiterhelfen könnte. (Geht so etwas überhaupt über Criteria)
Ich hoffe ich konnte mein Problem deutlich machen und es kann mir jemand Helfen.
Danke schonmal im vorraus
Mit freundlichen Grüßen
Oliver