When I don't like the Class::DBI methods, I make my own.
My complaint was that sometimes that's just not possible if the SUPER classes internals call the method you are overriding (as apposed to it's version of that method). I only want the consumer of my class to call my new; not the the internals of the superclass; yet I still want all of the is-a relationship perks; column and setup accessors.
For example, create a class that is-a Class::DBI and override create. Now call find_or_create(). Bad things happen.