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)