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; }