entity abstract class