2009-10-02 9 views
6

Web uygulamasında çalışıyorum. Projemizde ORB olarak Hazırda Beklemeyi kullanıyoruz. Aslında, uygulamamız kullanıcı seçimine bağlı olarak dinamik olarak bazı tablolar oluşturur. Kullanıcı tablo adını, sütun adını seçebilir ve daha sonra bir csv dosyasından veri alabilir. Bu yüzden sorum şu: Dinamik olarak oluşturulmuş bu tabloyu Hazırda Beklet ve Java nesneleriyle nasıl eşleştirilir?Dinamik hazır tabloyu Hazırda bekletme nasıl eşlenir?

cevap

10

Bu dinamik yapılabilir, ancak biraz dağınık:

Sen SessionFactory inşa edilmeden önce dinamik olarak hazırda bekleme en Yapılandırma nesnesi değiştirmek gerekir. İlkbahar kullanıyorsanız, bu AnnotationSessionFactoryBeanpostProcessAnnotationConfiguration() yöntemini geçersiz kılarak yapılabilir; aksi halde, buildSessionFactory()'u çağırmadan önce bunu Yapılandırma nesnesini kullanarak yapmanız gerekir.

Uygulama yeniden başlatma olmadan bunu yapmanız gerekiyorsa, ya SessionFactory'nizi yeniden yapılandırmaya (yani, kullanıcıların bunu yapana kadar beklemek zorunda kalacağı anlamına gelir) veya özel sınıflarınıza özel olarak ayrılmış ayrı bir SessionFactory örneği (Özel sınıflarınızın yerleşik sınıflarınıza başvurması gerekiyorsa, imkansızdır.

Sınıf/tablo eşlemelerine configuration.getMappings() aracılığıyla erişebilirsiniz. Ardından, Table API aracılığıyla yeni bir tablo eşlemesi oluşturup addTable() aracılığıyla yapılandırmaya eklemeniz gerekir. Aynı şey, bir sınıf eşlemesi olan PersistentClass ile yapılmalıdır. Birden fazla varlıkları temsil etmek için aynı sınıfı kullanıyorsanız (ör., Birden çok tabloyu eşleme), her biri için benzersiz varlık adlarını kullandığınızdan emin olun. Her uygulama yeniden başlatıldığında bunu yapmanız (yapılandırmayı değiştirmeniz) gerekecektir.

2

Tablolar ne kadar dinamik olarak oluşturulur? Tablolar benzer mi ve sadece veritabanı adını değiştirdiniz mi? Bir görüşe http://www.experts-exchange.com/Programming/Languages/Java/J2EE/Frameworks/Spring/Q_24237099.html

tamamen yeni bir tablo inşa ediyoruz, bir görünümü kullanabilirsiniz ve sadece doğrudan insanlar: İşte

bir tablo adını değiştirme tartışması nedir?

JDBC'de dinamik olarak sorgular oluşturmaktan ziyade, bunun için Hazırda Bekletme özelliğini neden kullanıyorsunuz?

+0

Bu sorunun Hibernate'i kullanmasının doğru olmadığını kabul ediyorum. – sbidwai

0

Veritabanı çözümü - bir görünüm oluşturabilir ve onu bir tabloya veya başka bir yere yönlendirebilirsiniz (yapının aynı olduğunu varsayarak).

,

veya

Sen yerli SQL (DDL) yürütmek için size uygulaması gerekir TABLE_B

GELEN SEÇ * olarak GÖRÜNÜM HIBERNATE_NAME CREATE TABLE_A

GELEN SEÇ * olarak ancak bu GÖRÜNÜM HIBERNATE_NAME CREATE Hibernate hack'lerinden daha kolay olmalı

İlgili konular