2011-11-17 150 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。

相關問題