abstract entity class