2011-11-17 22 views
6

Projem için JPA ve Hazırda Bekletme'yi kullanıyorum. aynı adlarla ancak farklı paketlerde farklı paketlerle iki sınıfım var. Ben bir arama sorgusu yaratıyorduJPA, aynı ada sahip ancak farklı paketlerde iki sınıfı nasıl tanıyabilir?

@Entity 
@Table(name="Y_USER") 
public class User { 

:

@Entity(name = "X_USER") 
@Table(name = "X_USER") 
public class User { 

ve: Bunlar .getSimpleName() ama onların basit isim aynı olduğu için işe yaramadı. .getName()'a değiştirdim. Bununla birlikte, yine de User'un geri döneceği karışıktır.

DÜZENLEME:

sahip olduğum:

SELECT_BY_PROPERTY_QUERY = "SELECT p FROM :CLASS: p WHERE p.:PROPNAME:=?"; 

ve ben:

SELECT_BY_PROPERTY_QUERY.replaceFirst(":CLASS:", clazz.getName()).replaceFirst(":PROPNAME:", propertyName); 

ve bunu hata ayıklama zaman böyle bir şey yapar:

Select p from User p Where p.name=? 

Yine User ve paket bilgilerini içermiyor ve yanlış User sınıfını döndürüyor.

+2

'getName()' FQN döndürüyor olmalıdır. Ne hatayı alıyorsun? –

+0

@ XaviLópez Sorumu düzenledim. – kamaci

cevap

4

Bir JPQL sorgusu oluşturmak isterseniz, Varlık adına kodunu girmeniz gerekir. Yayınladığınız gibi, aynı Java sınıfı tarafından temsil edilen 2 öğe var, ancak Farklı Varlık adı (X_USER sizin tarafınızdan açıkça belirtilmiş ve User örtük olarak ayarlanmıştır). çalışmalıyım böyle

dinamik olarak yerine Metamodel kullanmalıdır varlığın adını almak istiyorsanız, bu nedenle bir şey (işaretli değil):

EntityManager em = ... 
Metamodel model = em.getEntityManagerFactory().getMetamodel(); 
String entityName = model.entity(com.your.pckg.User.class).getName(); 

hth.

İlgili konular