I haven't had the opportunity to work with it yet but I hear Alzabo and Class::DBI go some distance to help you solve some of these problems and keep your hands away from having to write much of the lower-level code that nice OO-persistence can require. My thinking is that Alzabo might do even more for you than other solutions since it will also serve as your schema documentation *and* will generate it as well. Then again - I'm perfectly comfortable doing up a very nice schema in PostgreSQL and don't need Alzabo to create it for me.
Consider those as suggestions. I've got an example of code that does this sort of thing up at jbj-0731.tgz. Browse the Voter::Db classes.