2011-07-14 33 views
5

pracuję w tej chwili nad nowym projektem, który ma następujące wymagania:JPA/Hibernate przełącznik schematu programowego

Kilka schematów baz danych są posiadających te same tabele z identycznej strukturze (w skrócie: jeden podmiot do wielu schematów) .

Czy można przełączać się między tymi schematami według kodu? Chcę osiągnąć cel:

Użytkownik wybiera schemat B i aktualizuje niektóre elementy w tym zakresie. Następnie wykonuje wstawkę w schemacie A i tak dalej. Wiem, że mógłbym to zrobić przez podstawowe JDBC, dostarczając schemat do instrukcji, ale jeśli mogę tego uniknąć, zrobię to.

Może inne ORM Javy może to zrobić? Jestem zaznajomiony tylko z JPA/Hibernate.

Pozdrowienia

Odpowiedz

2

można użyć oddzielny SessionFactory s lub EntityManagerFactory s, po jednym dla każdego schematu. Skoro powiedział, że użytkownik wybiera schematu A lub B, można użyć coś takiego:

public enum Schema { 
    A, B 
} 

public EntityDaoImpl { 

    // Create and populate the map at DAO creation time (Spring etc.). 
    private Map<Schema, SessionFactory> sessionFactoryBySchema = ...; 

    private Session getSession(Schema schema) { 
     SessionFactory sessionFactory = sessionFactoryBySchema.get(schema); 
     return sessionFactory.getCurrentSession(); // ... or whatever 
    } 

    public void saveEntity(Schema schema, Entity entity) { 
     getSession(schema).save(entity); 
    } 
} 
+0

Rozwiązanie nie powinno być potrzeby dalszej konfiguracji, gdy jest uruchomiony. Przepraszam, że nie wspomniałem o tym w moim pytaniu – onigunn

+0

O czym mowa w dalszej konfiguracji? –

+0

Inne schematy z tego rodzaju obiektów mogą być importowane do bazy danych w dowolnym momencie. Potrzebuję czegoś, co działa dynamicznie. Uzyskiwanie odpowiednich schematów za pomocą metadanych i uzyskiwanie dostępu do nich – onigunn