@Override public Object clone() { try { Model clone = (Model)super.clone(); if (queryTree != null) clone.queryTree = this.queryTree.clone(); if (sources != null) clone.sources = new LinkedHashSet<>(this.sources); if (restrict != null) clone.restrict = new LinkedHashSet<>(this.restrict); return clone; } catch (CloneNotSupportedException e) { throw new RuntimeException("Someone inserted a noncloneable superclass", e); } }