For our o/r mapper framework LLBLGen Pro we use specialized databases for the tests, and different test projects per group of features. So we have a special database for inserts/updates for example, a special database for testing inheritance related actions, a special database for huge sets, a special database for fetching. On top of that, we have separated the unit tests in different projects: fetching oriented, linq provider oriented, insert/update/delete oriented, in-memory stuff oriented, etc.
This way, the tests are maintainable and don't influence eachother. With the special databases, we know what to expect and what to do.
It also depends on what you mean with persistence logic tests of course: if you want to tests the framework-level routines like we do, then mocking is something which is really not that useful: you want to test the real deal in scenario's which cover most, if not all, cases. If you're really talking about testing your code which utilizes framework-level code (e.g. your repository code), then mocking can help, as long as the framework utilized is of course error free. :)