/**
   * INTERNAL: Get the ref for the object. This is required for use by Refs, there might be a better
   * way to do it when objID are supported. (i.e. getting it from the object or identity map).
   */
  public Ref getRef(Object object, AbstractSession session) {
    SQLSelectStatement statement = new SQLSelectStatement();
    statement.addTable(getTables().firstElement()); // Assumed only one for obj-rel descriptors.
    statement
        .getFields()
        .addElement(new org.eclipse.persistence.expressions.ExpressionBuilder().ref());
    statement.setWhereClause(
        getObjectBuilder().buildPrimaryKeyExpressionFromObject(object, session));
    statement.setRequiresAliases(true);
    statement.normalize(session, this);

    ValueReadQuery valueQuery = new ValueReadQuery();
    valueQuery.setSQLStatement(statement);
    valueQuery.prepareCall(session, new DatabaseRecord());
    // Must return unwrapped Ref on WLS.
    valueQuery.getCall().setIsNativeConnectionRequired(true);

    Ref ref = (Ref) session.executeQuery(valueQuery);

    return ref;
  }