Thanks Nicklas, that magic worked perfectly. Interesting point about the variable number of steps from hyb to sample (if doing pooling) - this will cause some headaches but I think we have to ignore it and move on for the moment. Fortunately we are still in a BASE1 mindset with regards to biomaterials!
Nicklas Nordborg writes: > Hmmm... I was a bit puzzled at first... The query seemed to be a valid > query. However, I found that the problem is that the > "creationEvent.sources" is a Map collection where the LabeledExtract is > the key and the used quantity is the value part. Unfortunately it seems > like the expression "creationEvent.sources" only goes to the value part > (used quantity). That is why Hibernate complains with the error > "could not resolve property: name of: component[usedQuantity,dummy]" > > Hibernate has an index() function which can be used to get to the key > part of the map (WHERE index(lbe) ...) but it seems like it only > retrieves the ID of the LabeledExtract and not the name and other > properties. > > Now, all this can solved with a subquery magic using a custom-built > restriction. Replace the itemQuery.restrict() call with something like this: > > itemQuery.restrict( > new Restriction() > { > public String toQl(Query query, DbControl dc) > { > return "index(lbe) IN " + > "(SELECT l.id FROM LabeledExtractData l " + > " WHERE l.name = 'uci_tissues_fb_3.s1.e1.lbe1')"; > } > > public Collection<? extends QueryElement> getChildren() > { > return null; > } > }); > > Of course, this needs to be polished up a bit to be used for real. If > you need to go up to samples you must do that in the subquery, but that > is easier: > > WHERE l.parent.parent.name = ... > > This assumes that you always use non-pooled items. If you have pooled > items nothing will work, since the number of hops to get to the sample > may be different for different paths. In that case you'll probably have > to start at the sample level and then follow each path down to the > hybridizations. > > /Nicklas > > Bob MacCallum wrote: > > Hi, > > > > The following isn't working, even though some very similar code in > > net.sf.basedb.core.LabeledExtract works fine (I assume). I'm just > > restricting > > on a hard-coded "name" at the moment for testing: > > > > ItemQuery<net.sf.basedb.core.Hybridization> itemQuery = > > Hybridization.getQuery(); > > itemQuery.include(Include.SHARED); > > itemQuery.setDistinct(true); > > itemQuery.join(Hql.innerJoin("creationEvent.sources", > > Item.LABELEDEXTRACT.getAlias())); > > itemQuery.restrict( > > Restrictions.eq( > > Hql.property(Item.LABELEDEXTRACT.getAlias(), "name"), > > Expressions.string("uci_tissues_fb_3.s1.e1.lbe1") > > ) > > ); > > ... = itemQuery.list(dc); > > > > > > [java] Exception in thread "main" net.sf.basedb.core.BaseException: > > could not resolve property: name of: component[usedQuantity,dummy] [SELECT > > DISTINCT hyb FROM net.sf.basedb.core.data.HybridizationData hyb INNER JOIN > > hyb.creationEvent.sources lbe WHERE (lbe.name = > > :P1555286c83a454f1a9e048f5efbcde73)] > > [java] at > > net.sf.basedb.core.HibernateUtil.createQuery(HibernateUtil.java:1349) > > [java] at > > net.sf.basedb.core.AbstractEntityQuery.getMainHqlQuery(AbstractEntityQuery.java:349) > > [java] at net.sf.basedb.core.ItemQuery.list(ItemQuery.java:93) > > > > > > If I print out the query it looks like this > > > > [java] ItemQuery: SELECT DISTINCT hyb.null FROM > > net.sf.basedb.core.data.HybridizationData hyb INNER JOIN > > creationEvent.sources lbe WHERE (lbe.name = > > :P1555286c83a454f1a9e048f5efbcde73(uci_tissues_fb_3.s1.e1.lbe1)) > > > > > > Once we get this working, we want to join all the way to Sample - do you > > think > > that will be possible? > > > > many thanks, > > > > Bob. > > > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > basedb-devel mailing list > basedb-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/basedb-devel -- Bob MacCallum | VectorBase Developer | Kafatos/Christophides Groups | Division of Cell and Molecular Biology | Imperial College London | Phone +442075941945 | Email [EMAIL PROTECTED] ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ basedb-devel mailing list basedb-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/basedb-devel