generic dao and abstracted model