2011-11-17 113 views
6

我为我的项目使用JPA和Hibernate。我有两个班,同名不同包。它们是:JPA如何识别两个具有相同名称但不同包中的类?

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

和:

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

我创建一个搜索查询与:.getSimpleName()但没有工作,因为其简单的名称是相同的。我将其更改为.getName()

但是,它仍然混淆了哪个User返回。

编辑:

我有:

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

和我说:

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

,当我调试它,它使得类似:

Select p from User p Where p.name=? 

它仍然是User,它不包括包信息,并返回错误码User类。

+2

'getName()'应该返回FQN。你遇到了什么错误? –

+0

@XaviLópez我编辑了我的问题。 – kamaci

回答

4

如果要创建JPQL查询,则需要将实体名称传递给它。如您所发布的,您有两个实体,其中相同 Java类,但不同实体名称(X_USER由您明确设置,User隐式设置)。

如果要动态让你倒是应该使用Metamodel实体的名称,所以这样的事情应该做的工作(不打勾):

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

HTH。

相关问题