Return-Path: Delivered-To: apmail-openjpa-users-archive@minotaur.apache.org Received: (qmail 25106 invoked from network); 4 Jun 2009 18:13:03 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 4 Jun 2009 18:13:03 -0000 Received: (qmail 89744 invoked by uid 500); 4 Jun 2009 18:13:14 -0000 Delivered-To: apmail-openjpa-users-archive@openjpa.apache.org Received: (qmail 89664 invoked by uid 500); 4 Jun 2009 18:13:14 -0000 Mailing-List: contact users-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@openjpa.apache.org Delivered-To: mailing list users@openjpa.apache.org Received: (qmail 89628 invoked by uid 99); 4 Jun 2009 18:13:14 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2009 18:13:14 +0000 X-ASF-Spam-Status: No, hits=-1.8 required=10.0 tests=HTML_MESSAGE,RCVD_IN_DNSWL_MED,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of hsterl@us.ibm.com designates 32.97.110.152 as permitted sender) Received: from [32.97.110.152] (HELO e34.co.us.ibm.com) (32.97.110.152) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2009 18:13:01 +0000 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e34.co.us.ibm.com (8.13.1/8.13.1) with ESMTP id n54I9iNu021129 for ; Thu, 4 Jun 2009 12:09:44 -0600 Received: from d03av03.boulder.ibm.com (d03av03.boulder.ibm.com [9.17.195.169]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n54ICap1084432 for ; Thu, 4 Jun 2009 12:12:36 -0600 Received: from d03av03.boulder.ibm.com (loopback [127.0.0.1]) by d03av03.boulder.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n54ICZer020556 for ; Thu, 4 Jun 2009 12:12:35 -0600 Received: from d03nm129.boulder.ibm.com (d03nm129.boulder.ibm.com [9.17.195.33]) by d03av03.boulder.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n54ICZST020549 for ; Thu, 4 Jun 2009 12:12:35 -0600 Subject: JPQL issues querying maps with persistent collections X-KeepSent: CEF559D7:A0DFD236-872575CB:0062DC55; type=4; name=$KeepSent To: users@openjpa.apache.org X-Mailer: Lotus Notes Release 8.0.1 HF105 April 10, 2008 Message-ID: From: Heather Sterling Date: Thu, 4 Jun 2009 14:12:36 -0400 X-MIMETrack: Serialize by Router on D03NM129/03/M/IBM(Release 8.0.1|February 07, 2008) at 06/04/2009 12:12:35 MIME-Version: 1.0 Content-type: multipart/alternative; Boundary="0__=08BBFF58DFF15AC58f9e8a93df938690918c08BBFF58DFF15AC5" Content-Disposition: inline X-Virus-Checked: Checked by ClamAV on apache.org --0__=08BBFF58DFF15AC58f9e8a93df938690918c08BBFF58DFF15AC5 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: quoted-printable Hi, I have the following classes, ManagedElement and DynamicProperty, decla= red but I am having trouble querying based on the String[] values that are mapped as a persistent collection. I also have a question regarding a = JOIN that may/may not be required. The following works to retrieve a ManagedElement with a DynamicProperty= of a given name. String queryString =3D "SELECT nr FROM NamingRuleTestElement nr JOIN nr.appliesTo_DynamicProperty dyn WHERE dyn.name =3D 'PROPID_mStringArra= y'"; However, I would think that removing the extra JOIN would be allowed si= nce it's a 1-Many relationship. But the following does not work: String queryString =3D "SELECT nr FROM NamingRuleTestElement nr WHERE nr.appliesTo_DynamicProperty.name =3D 'PROPID_mStringArray'"; I am able to query the values using the MEMBER OF clause: String queryString =3D "SELECT nr FROM NamingRuleTestElement nr JOIN nr.appliesTo_DynamicProperty dyn WHERE dyn.name =3D 'PROPID_mStringArra= y' AND ?1 MEMBER OF dyn.values"; Query q =3D em.createQuery(queryString); q.setParameter(1, "a"); but not using the IN clause: String queryString =3D "SELECT nr FROM NamingRuleTestElement nr JOIN nr.appliesTo_DynamicProperty dyn WHERE dyn.name =3D 'PROPID_mStringArra= y' AND dyn.values IN ('a','b')"; I think I've been looking at this for too long. Any help is greatly appreciated. Thanks! ------------------------------------------------------ @Entity @Inheritance(strategy=3DInheritanceType.TABLE_PER_CLASS) @Table(name=3D"ManagedElement") public abstract class ManagedElement implements IEntity { /** * Collection of dynamic properties associated with this element. */ @OneToMany(targetEntity=3DDynamicProperty.class, mappedBy=3D "appliesTo_ManagedElement", cascade=3D{CascadeType.ALL}) @MapKey(name=3D"name") private Map appliesTo_DynamicProperty =3D = new HashMap(); .... }... @Entity(name=3D"NamingRuleTestElement") @Table(name =3D "namingrule_test_element") @DiscriminatorValue("NamingRuleTestElement") public class NamingRuleTestElement extends ManagedElement { } @Entity @Table(name=3D"DYNAMIC_PROPERTY") public class DynamicProperty { @Basic @Column(length=3D255, nullable=3Dfalse) String name; /** Array values are stored as persistent collections, so they are queryable */ @PersistentCollection @ContainerTable(name=3D"DYNAMIC_PROPERTY_ARRAY_VALUES") @ElementColumn(length=3D4000) String[] values; ..... }.... Heather Sterling Systems Management Development Phone: 919-254-7163 T/L: 444-7163 Cell: 919-423-3143 Email: hsterl@us.ibm.com= --0__=08BBFF58DFF15AC58f9e8a93df938690918c08BBFF58DFF15AC5--