Programmatic configuration is powerful, there are many options you can use (shouldn't need all of them) :
Code:
new org.hibernate.cfg.Configuration.Configuration()
.addDirectory( File directory ) //search all hbm.xml files from a directory
.addJar( File jar ) //searches all *.hbm.xml files in the jar and adds them to configuration
.addFile( File xmlFile ) //adds mapping from a specific file
.setProperty( Environment.DRIVER, "jdbc driver name" )
.setProperty( Environment.URL, "jdbc url" )
.setProperty( Environment...., "more options )")
.buildSessionFactory();
I think you could define some convention which is most practical for you use case.
Maybe some properties can be hard-coded in such a
SessionFactory factory, but you could read some options from you own configuration properties file.