2011-11-17 25 views
6

utilizo JPA e Hibernate para mi proyecto. Tengo dos clases con mismos nombres pero en paquetes diferentes. Ellos son:¿Cómo puede el JPA reconocer dos clases con el mismo nombre pero en paquetes diferentes?

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

y:

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

que estaba creando una consulta de búsqueda con: .getSimpleName() pero no funcionó debido a que su simple nombre son los mismos. Lo cambié a .getName().

Sin embargo, todavía confunde a la que User volver.

EDIT:

tengo que:

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

y yo que:

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

y cuando elimino errores que se hace algo así como:

Select p from User p Where p.name=? 

Es todavía User y no incluye la información del paquete y me vuelve malo clase User.

+2

'getName()' debe ser devolviendo el FQN. ¿Qué error estás recibiendo? –

+0

@ XaviLópez He editado mi pregunta. – kamaci

Respuesta

4

Si desea crear una consulta JPQL necesita pasar el Nombre de entidad a ella. Como ha publicado, tiene 2 entidades que están representadas por la misma clase de Java, pero diferente Nombre de entidad (X_USER establecido explícitamente por usted y User establecido implícitamente).

Si desea obtener dinámicamente el nombre de la entidad que debe más bien utilizar el Metamodel, por lo menos así debería hacer el trabajo (no verificado):

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

HTH.

Cuestiones relacionadas