2011-11-17 12 views
6

Io uso JPA e Hibernate per il mio progetto. Ho due classi con gli stessi nomi ma in . Essi sono:Come può l'JPA riconoscere due classi con lo stesso nome ma in pacchetti diversi?

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

e:

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

stavo creando una query di ricerca con: .getSimpleName() ma non ha funzionato perché il loro semplice nome sono gli stessi. L'ho cambiato in .getName().

Tuttavia, confonde ancora a quale User restituire.

EDIT:

ho che:

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

ed io che:

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

e quando il debug si fa qualcosa di simile:

Select p from User p Where p.name=? 

È ancora User e non include le informazioni sul pacchetto e mi restituisce la classe User errata.

+2

'getName()' deve restituire l'FQN. Che errore stai ottenendo? –

+0

@ XaviLópez Ho modificato la mia domanda. – kamaci

risposta

4

Se si desidera creare una query JPQL è necessario passare il nome Entity ad esso. Come hai postato, si hanno 2 entità che sono rappresentati dalla classe stessa Java, ma diverso Nome entità (X_USER esplicitamente impostata da voi e User impostato implicitamente).

Se si desidera ottenere dinamicamente il nome del soggetto si dovrebbe invece utilizzare il Metamodel, quindi qualcosa di simile dovrebbe fare il lavoro (non controllato):

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

HTH.

Problemi correlati