"But but... I can swap out my entire my persistance layer since it's all just an interface!"

Has anyone ever actually done this ?

I have used something similar with effects in Haskell to mock "the real world" for running tests.

But if it was as convoluted to use as it's in Java, I wouldn't. And also, it's not enterprise CRUD. Enterprise CRUD resists complex architectures like nothing else.