public IKeyOrder<E> getKeyOrder(IPredicate<E> predicate) {
   // @todo I am not sure that we really need to cross check this.
   final IKeyOrder<E> keyOrder1 = relation1.getKeyOrder(predicate);
   final IKeyOrder<E> keyOrder2 = relation2.getKeyOrder(predicate);
   if (keyOrder1 == null || keyOrder2 == null) throw new UnsupportedOperationException();
   if (!keyOrder1.equals(keyOrder2)) throw new UnsupportedOperationException();
   return keyOrder1;
 }