concept Entity > NamedConcept { } abstract concept AbstractJavaObjectEntity > Entity { abstract A object(); } concept TransientJavaObjectEntity > AbstractJavaObjectEntity { gettable transient A object; } concept PersistentJavaObjectEntity > AbstractJavaObjectEntity { gettable A object; } concept ConceptEntity > AbstractJavaObjectEntity { new Ref concept; A object() { ret concept!; } }