-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 
Author Message
 Post subject: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 10:06 am 
Newbie

Joined: Thu Mar 10, 2011 9:45 am
Posts: 4
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.


Top
 Profile  
 
 Post subject: Re: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 10:42 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Du hast hierbei die Polymorphy etwas missverstanden: Du kannst nicht auf ein Attribut filtern, das nicht existiert (zumindest nicht auf der Abstraktionsebene). Das wäre so, als würdest du sagen: "Gib mir mal alle essbaren Sachen, bei denen der Schnabel rot ist" (Interface Essbar, implementiert von allen möglichen Pflanzen und Tieren). Ein Spinatblatt hat keinen Schnabel!

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
 Post subject: Re: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 10:58 am 
Newbie

Joined: Thu Mar 10, 2011 9:45 am
Posts: 4
Danke für die schnelle Antwort, auch, wenn es keine Hilfe war :).

mmerder wrote:
Du hast hierbei die Polymorphy etwas missverstanden: Du kannst nicht auf ein Attribut filtern, das nicht existiert (zumindest nicht auf der Abstraktionsebene). Das wäre so, als würdest du sagen: "Gib mir mal alle essbaren Sachen, bei denen der Schnabel rot ist" (Interface Essbar, implementiert von allen möglichen Pflanzen und Tieren). Ein Spinatblatt hat keinen Schnabel!


Da hast du Recht.

Wie könnte man das Problem lösen?
Hilft hier eine zusätzliche Aufrage, die in etwa so aussehen könnte?:
Code:
from File f where f.fileHolder.class='Task' and f.fileHolder.step=(:step) and f.deleted=(:deleted)


Top
 Profile  
 
 Post subject: Re: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 11:50 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Ich glaube nicht...

Probiere so etwas wie:
Code:
from File f where f.fileHolder in (select t from Task t where t.step=...)

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
 Post subject: Re: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 12:04 pm 
Newbie

Joined: Thu Mar 10, 2011 9:45 am
Posts: 4
mmerder wrote:
Ich glaube nicht...

Probiere so etwas wie:
Code:
from File f where f.fileHolder in (select t from Task t where t.step=...)


Das hatte ich bereits.
Ich bekomme folgende Exception:
[ERROR] JDBCExceptionReporter - Operand should contain 2 column(s)
java.sql.SQLException: Operand should contain 2 column(s)


Top
 Profile  
 
 Post subject: Re: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 12:06 pm 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Hmm, schwierige Frage, ohne weitere analyse (z.B. der generierten SQLs) wirds schwierig übers Forum...

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
 Post subject: Re: WICHTIG!!! Problem mit UserTypes in HQL --- Bitte um Hilfe!
PostPosted: Thu Mar 10, 2011 12:14 pm 
Newbie

Joined: Thu Mar 10, 2011 9:45 am
Posts: 4
Hmm, bin ich denn der einzige, der mit UserTypes arbeitet?

Ich habe einige Beispiele gefunden:
Code:
Query q = session.createQuery(from Comment c where c.rating = :rating);
q.setParameter(rating,
               Rating.LOW,
               Hibernate.custom(RatingUserType.class));

Diese sind aber nicht so komplex geschlachtelt, wie bei mir.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.