add preCreate and preUpdate to interface so that can minimize the transactional window if transactional is not needed