Hallo,
ich habe ein großes Problem, für welches ich sehr schnell eine Lösung finden muss.
Ich programmiere in Grails, deshalb sind hier Grails-Mappings aufgeführt.
Ich habe folgende Klassen:
Code:
interface FileHolder {}
Code:
class Task implements FileHolder {
Step step
}
Code:
class Step {
List<Task> tasks
static hasMany = [tasks: Task]
}
Code:
class File {
FileHolder fileHolder
fileHolder type: FileHolderUserType, {
column name: "holderClass", sqlType: "varchar(255)"
column name: "holderId", sqlType: "bigint"
}
}
Kurze Beschreibung: Es gibt ein Interface FileHolder. Alle Implementierungen des Interfaces können also Files enthalten.
Dafür implementiere ich ein eigenes FileHolderUserType mit zwei Spalten: Klasse und die ID des Objekts.
Es funktioniert erstmal gut.
Jetzt versuche ich mit HQL Objekte auszulesen:
Code:
public List<File> findFiles(Step step) {
return File.findAll("from File f where \
f.fileHolder.step=(:step) and \
f.deleted=(:deleted)",
[step:step, deleted:onlyDeleted])
}
Ich suche also alle Files, die den Tasks eines Steps zugeordnet sind.
Leider funktioniert das nicht. Die Fehlermeldung lautet in etwa: property step gibt es im fileHolder nicht.
Das tut es auch nicht, da das Interface FileHolder leer ist.
Ich dachte, die Properties der Objekte im HQL-Pfad werden dynamisch zur Laufzeit erkannt.
Hat jemand eine Idee zu meinem Problem?
Bitte, es ist sehr wichtig.