package org.aplikator.server.descriptor; import java.io.Serializable; import org.aplikator.server.persistence.PersisterFactory; public abstract class JoinableProperty<R extends Entity> extends Property<Integer> { public R referredEntity; public JoinableProperty(String id, R referredEntity, Entity ownEntity, boolean required) { super(id, Integer.class, 0, required, ownEntity, false, null); // TODO change when PK is more general this.referredEntity = referredEntity; } public <T extends Serializable> Property<T> relate(Property<T> target) { Property<T> related; try { related = target.clone(); } catch (CloneNotSupportedException e) { throw new IllegalStateException(e); } related.setRefferedThrough(this); PersisterFactory.getPersister().registerReferencedProperty(target, related); return related; } }