diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java
index 301a018..f4b1c4c 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java
@@ -24,8 +24,6 @@
  *       - 458877 : Add national character support
  *     02/23/2015-2.6 Dalia Abo Sheasha
  *       - 460607: Change DatabasePlatform StoredProcedureTerminationToken to be configurable
- *     02/14/2018-2.7 Will Dazey
- *       - 529602: Added support for CLOBs in DELETE statements for Oracle
  ******************************************************************************/
 package org.eclipse.persistence.internal.databaseaccess;
 
@@ -3518,15 +3516,4 @@ public boolean supportsConnectionUserName() {
      public String getConnectionUserName() {
          throw new UnsupportedOperationException("Connection user name is not supported.");
      }
-
-    /**
-     * INTERNAL:
-     * Override this method if the platform needs to use a custom function based on the DatabaseField
-     * @return An expression for the given field set equal to a parameter matching the field
-     */
-    public Expression createExpressionFor(DatabaseField field, Expression builder) {
-        Expression subExp1 = builder.getField(field);
-        Expression subExp2 = builder.getParameter(field);
-        return subExp1.equal(subExp2);
-    }
 }
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.java
index b6fb00f..7fbb662 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/databaseaccess/DatasourcePlatform.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 1998, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2018 Oracle and/or its affiliates. All rights reserved.
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
  * which accompanies this distribution.
@@ -12,7 +12,9 @@
  *     09/29/2016-2.7 Tomas Kraus
  *       - 426852: @GeneratedValue(strategy=GenerationType.IDENTITY) support in Oracle 12c
  *     09/14/2017-2.6 Will Dazey
- *       - 522312: Add the eclipselink.sequencing.start-sequence-at-nextval property 
+ *       - 522312: Add the eclipselink.sequencing.start-sequence-at-nextval property
+ *     02/20/2018-2.7 Will Dazey
+ *       - 529602: Added support for CLOBs in DELETE statements for Oracle
  ******************************************************************************/
 package org.eclipse.persistence.internal.databaseaccess;
 
@@ -28,6 +30,7 @@
 import org.eclipse.persistence.descriptors.DescriptorQueryManager;
 import org.eclipse.persistence.exceptions.ConversionException;
 import org.eclipse.persistence.exceptions.ValidationException;
+import org.eclipse.persistence.expressions.Expression;
 import org.eclipse.persistence.expressions.ExpressionOperator;
 import org.eclipse.persistence.internal.helper.ClassConstants;
 import org.eclipse.persistence.internal.helper.ConversionManager;
@@ -1061,4 +1064,14 @@ public void removeIdentitySequences(
             final Session session, final String defaultIdentityGenerator, final Set<String> tableNames) {
     }
 
+    /**
+     * INTERNAL:
+     * Override this method if the platform needs to use a custom function based on the DatabaseField
+     * @return An expression for the given field set equal to a parameter matching the field
+     */
+    public Expression createExpressionFor(DatabaseField field, Expression builder) {
+        Expression subExp1 = builder.getField(field);
+        Expression subExp2 = builder.getParameter(field);
+        return subExp1.equal(subExp2);
+    }
 }
diff --git a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/descriptors/ObjectBuilder.java b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/descriptors/ObjectBuilder.java
index c8e6c1a..5bda6a2 100644
--- a/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/descriptors/ObjectBuilder.java
+++ b/foundation/org.eclipse.persistence.core/src/org/eclipse/persistence/internal/descriptors/ObjectBuilder.java
@@ -21,7 +21,7 @@
  *       - 485984: Retrieve FetchGroup info along with getReference() from cache
  *     08/07/2016-2.7 Dalia Abo Sheasha
  *       - 499335: Multiple embeddable fields can't reference same object
- *     02/14/2018-2.7 Will Dazey
+ *     02/20/2018-2.7 Will Dazey
  *       - 529602: Added support for CLOBs in DELETE statements for Oracle
  ******************************************************************************/
 package org.eclipse.persistence.internal.descriptors;
@@ -49,6 +49,7 @@
 import org.eclipse.persistence.internal.core.descriptors.CoreObjectBuilder;
 import org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor;
 import org.eclipse.persistence.internal.databaseaccess.DatabasePlatform;
+import org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform;
 import org.eclipse.persistence.internal.databaseaccess.Platform;
 import org.eclipse.persistence.internal.expressions.*;
 import org.eclipse.persistence.internal.helper.*;
@@ -2918,7 +2919,7 @@ public void createPrimaryKeyExpression(AbstractSession session) {
         if(null != primaryKeyFields) {
             for (int index = 0; index < primaryKeyFields.size(); index++) {
                 DatabaseField primaryKeyField = (DatabaseField)primaryKeyFields.get(index);
-                subExpression = session.getPlatform().createExpressionFor(primaryKeyField, builder);
+                subExpression = ((DatasourcePlatform)session.getDatasourcePlatform()).createExpressionFor(primaryKeyField, builder);
 
                 if (expression == null) {
                     expression = subExpression;
