EntityInfo(Class voClazz) { voClass = voClazz; voPrimaryKeyField = FieldUtils.getAnnotatedField(Id.class, voClass); DebugUtils.Assert(voPrimaryKeyField != null, String.format("%s has no primary key", voClass)); voPrimaryKeyField.setAccessible(true); EO at = (EO) voClazz.getAnnotation(EO.class); if (at != null) { eoClass = at.EOClazz(); DebugUtils.Assert(eoClass != null, String.format("cannot find EO entity specified by VO entity[%s]", voClazz.getName())); eoPrimaryKeyField = FieldUtils.getAnnotatedField(Id.class, eoClass); DebugUtils.Assert(eoPrimaryKeyField != null, String.format("cannot find primary key field(@Id annotated) in EO entity[%s]", eoClass.getName())); eoPrimaryKeyField.setAccessible(true); eoSoftDeleteColumn = FieldUtils.getField(at.softDeletedColumn(), eoClass); DebugUtils.Assert(eoSoftDeleteColumn != null, String.format("cannot find soft delete column[%s] in EO entity[%s]", at.softDeletedColumn(), eoClass.getName())); eoSoftDeleteColumn.setAccessible(true); } buildInheritanceDeletionExtension(); buildSoftDeletionCascade(); }