diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLFunctionsAbstractBuilder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLFunctionsAbstractBuilder.java index c96960a057..0ff9b8bef9 100644 --- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLFunctionsAbstractBuilder.java +++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/JPQLFunctionsAbstractBuilder.java @@ -63,7 +63,15 @@ public void visit(IdExpression expression) { //Get id attribute name ClassDescriptor descriptor = this.queryContext.getDeclaration(variableName).getDescriptor(); List primaryKeyFields = descriptor.getPrimaryKeyFields(); - if (!isEmbeddable(descriptor.getMappings())) { + if (isEmbeddable(descriptor.getMappings())) { + String idAttributeName = getIdAttributeNameByField(descriptor.getMappings(), primaryKeyFields.get(0)); + StateFieldPathExpression stateFieldPathExpression = new StateFieldPathExpression( + expression.getParent(), variableText + "." + idAttributeName); + expression.setStateFieldPathExpression(stateFieldPathExpression); + // Continue with created StateFieldPathExpression + // It handle by ObjectBuilder booth @Id/primary key types (simple/composite) + expression.getStateFieldPathExpression().accept(this); + } else { for (DatabaseField primaryKeyField : primaryKeyFields) { String idAttributeName = getIdAttributeNameByField(descriptor.getMappings(), primaryKeyField); StateFieldPathExpression stateFieldPathExpression = new StateFieldPathExpression( @@ -73,15 +81,6 @@ public void visit(IdExpression expression) { // It handle by ObjectBuilder booth @Id/primary key types (simple/composite) expression.getStateFieldPathExpression().accept(this); } - } else { - String idAttributeName = getIdAttributeNameByField(descriptor.getMappings(), primaryKeyFields.get(0)); - StateFieldPathExpression stateFieldPathExpression = new StateFieldPathExpression( - expression.getParent(), variableText + "." + idAttributeName); - expression.setStateFieldPathExpression(stateFieldPathExpression); - // Continue with created StateFieldPathExpression - // It handle by ObjectBuilder booth @Id/primary key types (simple/composite) - expression.getStateFieldPathExpression().accept(this); - } } diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ReportItemBuilder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ReportItemBuilder.java index 6d23c32ddd..d477aae97e 100644 --- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ReportItemBuilder.java +++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/jpql/ReportItemBuilder.java @@ -626,12 +626,16 @@ public void visit(ValueExpression expression) { addAttribute(identificationVariable.getText(), queryExpression); } + @Override + public void visit(IdExpression expression){ + multipleSelects = true; + } private void visitAbstractSelectClause(AbstractSelectClause expression) { multipleSelects = false; expression.getSelectExpression().accept(this); - if (multipleSelects || (expression.getSelectExpression() instanceof IdExpression)) { + if (multipleSelects) { query.returnWithoutReportQueryResult(); } else { diff --git a/jpa/eclipselink.jpa.testapps/jpa.test.jpql/src/test/java/org/eclipse/persistence/testing/tests/jpa/jpql/advanced/compositepk/JUnitJPQLComplexAggregateTest.java b/jpa/eclipselink.jpa.testapps/jpa.test.jpql/src/test/java/org/eclipse/persistence/testing/tests/jpa/jpql/advanced/compositepk/JUnitJPQLComplexAggregateTest.java index eea1054e62..a28792686a 100644 --- a/jpa/eclipselink.jpa.testapps/jpa.test.jpql/src/test/java/org/eclipse/persistence/testing/tests/jpa/jpql/advanced/compositepk/JUnitJPQLComplexAggregateTest.java +++ b/jpa/eclipselink.jpa.testapps/jpa.test.jpql/src/test/java/org/eclipse/persistence/testing/tests/jpa/jpql/advanced/compositepk/JUnitJPQLComplexAggregateTest.java @@ -154,7 +154,8 @@ public void testCompositePrimaryKey() { // Ensure the result size is greater than 0 assertTrue("The result size should be greater than 0", !keys.isEmpty()); - + Assert.assertEquals("first name should be John", "John", keys.get(0).firstName); + Assert.assertEquals("last name should be John", "Doe", keys.get(0).lastName); } catch (Exception e) { // If there's an exception, rollback the transaction rollbackTransaction(em);