code: public String logicalCollectionTableName(String tableName, String ownerEntityTable,
        String associatedEntityTable, String propertyName) {
      if (tableName == null) {
        // use of a stringbuilder to workaround a JDK bug
        return new StringBuilder(ownerEntityTable).append("_")
            .append(associatedEntityTable == null ? unqualify(propertyName) : associatedEntityTable).toString();
      } else {
        return tableName;
      }
    }
docs: Returns either the table name if explicit or if there is an associated
  table, the concatenation of owner entity table and associated table
  otherwise the concatenation of owner entity table and the unqualified
  property name