in reply to package structure

First of all, you need to be consistent in which directory level you use as the base package name. I see you have bar::bar1, but also a plain bar, even though they're located in the same directory. In other words, your bar package ought to read like this:
package bar::bar; use base 'Class::DBI'; 1;
For the relationships, you're supposed to use the full package name, so
__PACKAGE__->has_many(barf => 'bar::bar2');
I don't think you're actually supposed to use() your subclasses inside your base class either.