Well, I am solving similar problem, however, with usage of table partitioning provided by PostgreSQL.
for your case you should create the following structure:
single table USER with field where it belongs (belongs_to) (AZ, TX etc.) (this table will be empty)
create inherited table USER_AZ like
Code:
CREATE TABLE USER_AZ (constraint USER_AZ_CHECK CHECK (belongs_to = 'AZ') ) INHERITS USER;
create inherited table USER_TX like
Code:
CREATE TABLE USER_TX (constraint USER_TX_CHECK CHECK (belongs_to = 'TX') ) INHERITS USER;
provide trigger if you need to insert data: trigger is applied on USER table, and makes a real insert into partition-specific table. Another trigger is required to trick Hibernate, to make him fill that the data was inserted. If needed I will show you.
All the details you can find in comprehensive PostgreSQL documentation.
Then You can map USER table to your User Entity, and make transparent queries, either on all users (this will make PostgreSQL to work with each tables), or with specifying to which partition it belongs (adding another query option belongs_to = 'AZ' for example), and in this case PostgreSQL will work strait forward with your single table USER_AZ, but you will be querying same hibernate entity and all your logic will be implemented once.
The problem in your case could be, your database is at the moment already partitioned, so you have to create some pl/sql script to efficiently dump and recreate your structure based on partitioning.
and I guess same features could be achieved using other databases. However I would recommend to stick to PostgreSQL - for last 10 years it never let me down.