2013-08-08 19 views
8

Özel bir adlandırma stratejisinin nasıl uygulanacağını araştırırken (yalnızca tablo adları için), çözemediğim bir tutarsızlığa rastladım. (Ben PostgreSQL 9.1.9 ile JBoss 6.1.0.Final üzerinde hazırda çekirdekli 3.6.6.Final kullanıyorum)hangi adlandırma stratejisinin varsayılan olarak hazırda bekletilmesi

NamingStrategy için üç yerleşik uygulamalar var gibi:

  1. DefaultNamingStrategy
  2. EJB3NamingStrategy
  3. ImprovedNamingStrategy

varsayılanyılında EJB3NamingStrategy ayarlanmalıdır görünüyor. Ancak, tablo adları, yukarıdakilerin hiçbiriyle uyuşmayan bir stratejiye göre ayarlanmış gibi görünmektedir.

Örnek:
Sınıf adı: package.ClassName
Ortaya tablo adı: classname

Stratejiler 1. ve 2. basitçe basitçe bütün paket adları ve noktalar kaldırır StringHelper.unqualify(className) diyoruz, bu nedenle sonuç ClassName olmalıdır.

Strateji 3, tüm paket adlarını ve noktalarını kaldırır, sonra her cameled harfinden önce bir alt çizgi koyar ve son olarak class_name değerini vermesi gereken küçük harfe dönüştürür.

(4.1.0.Final hazırda bekletme kaynak kodu bu sınıflarda değişmeden görünmektedir.)

kimse bana bu konunun anlaşılmasına yardımcı olabilir mi?

cevap

3

Çok kolay! hibernate-core 3.6.6.Final ile oyuncak ortamı oluşturmak için zaman harcamak istemediğimden, hangi örneğin ÇALIŞMA İZLEME UYGULAMALARINIZ'DAKİ KULLANILDIĞINI size nasıl kontrol edeceğimi öğretiyorum.

Ana makinenize visualvm yükleyebilirsiniz. Yerel uygulama için yığın dökümü oluşturulmasına izin verir. yığın kaldır sunucuda dökümü oluşturmak için - sunucuda çalıştırmak: visualvm yılında

jmap -dump:format=b,file=heap.dump $PID 

Açık dökümü ve OQL sorguyu çalıştırın:

adlandırma STRATEJİ olduğunu
map(heap.objects('org.hibernate.cfg.Configuration'), "it.namingStrategyDelegator") 

. hbm veya jpa NamingStrategy'nin diğer gerçek türlerinin kullanıldığını öğrenmek için, referans hiyerarşisinde gezinmek için "Örnek" sekmesini kullanabilirsiniz.

Hazırda bekletme farklı sürümü, farklı bildirilen alanlar ve türleri var. Bu sınıf hazırda sürümü değil

heap.objects('org.hibernate.cfg.Configuration') 

ise - denemek dokümanlar ve kaynakları okuyup, uygun sınıf bulmak: hayır namingStrategyDelegator alan varsa örneğine kazma deneyin.

map(heap.objects('org.hibernate.cfg.Configuration'), "it.namingStrategyDelegator") 
     == org.hibernate.cfg.naming.LegacyNamingStrategyDelegator 

ve dahili olarak kullanır: bağımlılık org.hibernate:hibernate-entitymanager:jar:4.3.11.Final ile

Ben

LegacyHbmNamingStrategyDelegate 
LegacyJpaNamingStrategyDelegate 

JPA ek açıklamalarının hediyelerin bağlı. Her durumda, bu örnekler, numaralı namingStrategy alanına sahip LegacyNamingStrategyDelegator (yea, döngüsel referanslar!) Referansını göstermektedir.

Hepsi bu kadar! Ben bu yazı ((mutlu kesmek izlemek için

sayesinde yazmak benim wepapp ve 5 dakika içinde varsayılan isimlendirme stratejisi uygulamasını bulmak için 1 dakika harcamak!

İlgili konular