@Override
 public List<? extends Value> getJoinColumns(JoinColumnResolutionContext context) {
   List<Value> columns = new ArrayList<Value>();
   for (String name : targetColumnNames) {
     // the nulls represent table, schema and catalog name which are ignored anyway...
     columns.add(context.resolveColumn(name, null, null, null));
   }
   return columns;
 }
 @Override
 public TableSpecification getReferencedTable(JoinColumnResolutionContext context) {
   return context.resolveTableForAttribute(manyToManyElement.getPropertyRef());
 }
 @Override
 public List<? extends Value> getJoinColumns(JoinColumnResolutionContext context) {
   return context.resolveRelationalValuesForAttribute(manyToManyElement.getPropertyRef());
 }
 @Override
 public TableSpecification getReferencedTable(JoinColumnResolutionContext context) {
   return context.resolveTable(null, null, null);
 }