2011-11-17 11 views
6

Używam JPA i Hibernate dla mojego projektu. Mam dwie klasy z o tych samych nazwach, ale w różnych pakietach. Są to:W jaki sposób WZP może rozpoznać dwie klasy o tej samej nazwie, ale w różnych pakietach?

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

oraz:

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

byłem tworzenia zapytania z: .getSimpleName() ale to nie działa, ponieważ ich prosta nazwa jest taka sama. Zmieniłem go na .getName().

Jednak nadal mylące do którego User do powrotu.

EDIT:

muszę, że:

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

a ja, że:

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

i kiedy debugować go czyni coś takiego:

Select p from User p Where p.name=? 

To nadal jest User i nie zawiera informacji o pakiecie i zwraca mi złe klasy User.

+2

'getName()' powinno zwracać FQN. Jaki błąd dostałeś? –

+0

@ XaviLópez Zmieniłem moje pytanie. – kamaci

Odpowiedz

4

Jeśli chcesz utworzyć zapytanie JPQL, musisz przekazać mu nazwę jednostki .. Jak napisałeś, masz 2 podmioty, które są reprezentowane przez tę samą klasę Java, aleinna nazwa jednostki (X_USER jawnie ustawiona przez ciebie i User ustawiona niejawnie).

Jeśli chcesz uzyskać dynamicznie nazwę podmiotu należy raczej używać Metamodel, więc coś takiego powinien wykonać pracę (nie sprawdzone):

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

HTH.

Powiązane problemy