Hi all,
  My Entity (TestEntity) has one embedded
attribute(eAttr) which contains a Map attribute (sample).  It is
annotated with ElementCollection.
   
     
@ElementCollection
     
  @CollectionTable(name
= "TABLE_1",
             
joinColumns = @JoinColumn(name
= "PARENT_ID"))
     
  @MapKeyColumn(name
= "C1")
     
  @Column(name
= "C2")
     
  private
Map<String, String> sample = new
HashMap<String, String>();
   
  You can find the details of the queries and the
exceptions below. I justw anted to check if you have any experience on
querying the embedded Map attributes. 
   
  I am trying to query on my “sample” attribute
where C1 equals “xxxx” and C2 equals “yyyy”. I have first tried with
JQPL like this
   
  Query
qry = odb_em.createQuery("select
a from TestEntity a join a.eAttr.sample n where KEY(n) = :param1 and
VALUE(n)= :param2");
  qry.setParameter(“param1”,
“xxxx”);
  qry.setParameter(“param2”,
“yyyy”);
  List l
= qry.getResultList();
  System.out.println("Query
Size:::" +
l.size());
   
   
  But I received this error
  Exception
in thread "main" Local Exception Stack: 
  Exception
[EclipseLink-6070] (Eclipse Persistence Services -
2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.QueryException
  Exception
Description: Invalid use of a query key
[org.eclipse.persistence.mappings.DirectMapMapping[sample]]
representing a "to-many" relationship in an _expression_.  Use anyOf()
rather than get().
       
at
org.eclipse.persistence.exceptions.QueryException.invalidUseOfToManyQueryKeyInExpression(QueryException.java:735)
       
at
org.eclipse.persistence.internal.expressions.QueryKeyExpression.validateNode(QueryKeyExpression.java:887)
       
at org.eclipse.persistence.expressions._expression_.normalize(_expression_.java:3009)
       
at
org.eclipse.persistence.internal.expressions.DataExpression.normalize(DataExpression.java:342)
       
at
org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:612)
       
at
org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:599)
       
at
org.eclipse.persistence.internal.expressions.DataExpression.normalize(DataExpression.java:336)
       
at
org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:612)
       
at
org.eclipse.persistence.internal.expressions.QueryKeyExpression.normalize(QueryKeyExpression.java:599)
       
at
org.eclipse.persistence.internal.expressions.CompoundExpression.normalize(CompoundExpression.java:218)
       
at
org.eclipse.persistence.internal.expressions.RelationExpression.normalize(RelationExpression.java:476)
       
at
org.eclipse.persistence.internal.expressions.CompoundExpression.normalize(CompoundExpression.java:218)
       
at
org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1300)
       
at
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildNormalSelectStatement(ExpressionQueryMechanism.java:491)
       
at
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareSelectAllRows(ExpressionQueryMechanism.java:1553)
       
at org.eclipse.persistence.queries.ReadAllQuery.prepareSelectAllRows(ReadAllQuery.java:678)
       
at org.eclipse.persistence.queries.ReadAllQuery.prepare(ReadAllQuery.java:625)
       
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:509)
       
at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:820)
       
at org.eclipse.persistence.queries.DatabaseQuery.prepareCall(DatabaseQuery.java:1588)
       
at
org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:266)
       
at
org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:182)
       
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:134)
       
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:118)
       
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1373)
       
at com.ciena.test.TestJpa.main(TestJpa.java:341)
   
  Then I tried ExpressionBuilder and received the
following exception
   
  //Eclipse
specific classes - getting JpaEntityManager
       
JpaEntityManager eclipseLink_em = JpaHelper.getEntityManager(em);
   
       
ExpressionBuilder expBuilder = new
ExpressionBuilder();
       
_expression_ ex = expBuilder.anyOf("eAttr.sample").mapKey().equal("xxxx");
       
Query qry1 = eclipseLink_em.createQuery(ex.and(expBuilder.anyOf("eAttr.sample").equal("yyyy")),
TestEntity.class);
        
  List l = qry1.getResultList();
       
System.out.println("Query
Size with EB:::" +
l.size() + " 
Value ::" +
l.toString());
   
       
em.close();
   
  Exception
[EclipseLink-6159] (Eclipse Persistence Services -
2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.QueryException
  Exception
Description: Cannot find mapping for MapEntryExpression with base: [
  Query
Key eAttr.sample
    
Base com.test.TestEntity].
  Query:
ReadAllQuery(referenceClass=TestEntity )
       
at
org.eclipse.persistence.exceptions.QueryException.noMappingForMapEntryExpression(QueryException.java:1456)
       
at
org.eclipse.persistence.internal.expressions.MapEntryExpression.getInterfaceContainerPolicy(MapEntryExpression.java:251)
       
at
org.eclipse.persistence.internal.expressions.MapEntryExpression.isAttribute(MapEntryExpression.java:233)
       
at
org.eclipse.persistence.internal.expressions.RelationExpression.isObjectComparison(RelationExpression.java:449)
       
at
org.eclipse.persistence.internal.expressions.RelationExpression.normalize(RelationExpression.java:475)
       
at
org.eclipse.persistence.internal.expressions.CompoundExpression.normalize(CompoundExpression.java:218)
       
at
org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1300)
       
at
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildNormalSelectStatement(ExpressionQueryMechanism.java:491)
       
at
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareSelectAllRows(ExpressionQueryMechanism.java:1553)
       
at org.eclipse.persistence.queries.ReadAllQuery.prepareSelectAllRows(ReadAllQuery.java:678)
       
at org.eclipse.persistence.queries.ReadAllQuery.prepare(ReadAllQuery.java:625)
       
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:509)
       
at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:820)
       
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:470)
       
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:710)
       
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1036)
       
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:380)
       
at
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1122)
       
at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2908)
       
at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)
       
at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)
       
at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1247)
       
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:479)
       
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:714)
       
at com.ciena.test.TestJpa.main(TestJpa.java:354)
   
  Exception
in thread "main" Local Exception Stack: 
  Exception
[EclipseLink-6159] (Eclipse Persistence Services -
2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.QueryException
  Exception
Description: Cannot find mapping for MapEntryExpression with base: [
  Query
Key eAttr.sample
    
Base com.test.TestEntity].
  Query:
ReadAllQuery(referenceClass=TestEntity)
       
at
org.eclipse.persistence.exceptions.QueryException.noMappingForMapEntryExpression(QueryException.java:1456)
       
at
org.eclipse.persistence.internal.expressions.MapEntryExpression.getInterfaceContainerPolicy(MapEntryExpression.java:251)
       
at
org.eclipse.persistence.internal.expressions.MapEntryExpression.isAttribute(MapEntryExpression.java:233)
       
at
org.eclipse.persistence.internal.expressions.RelationExpression.isObjectComparison(RelationExpression.java:449)
       
at
org.eclipse.persistence.internal.expressions.RelationExpression.normalize(RelationExpression.java:475)
       
at
org.eclipse.persistence.internal.expressions.CompoundExpression.normalize(CompoundExpression.java:218)
       
at
org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1300)
       
at
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildNormalSelectStatement(ExpressionQueryMechanism.java:491)
       
at
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareSelectAllRows(ExpressionQueryMechanism.java:1553)
       
at org.eclipse.persistence.queries.ReadAllQuery.prepareSelectAllRows(ReadAllQuery.java:678)
       
at org.eclipse.persistence.queries.ReadAllQuery.prepare(ReadAllQuery.java:625)
       
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:509)
       
at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:820)
       
at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:470)
       
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:710)
       
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1036)
       
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:380)
       
at
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1122)
       
at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2908)
       
at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)
       
at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)
       
at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1247)
       
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:479)
       
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:714)
       
at com.ciena.test.TestJpa.main(TestJpa.java:354)