2015-10-02 41 views
2

有沒有辦法找出如何從JPA實體名稱獲取類?

java.lang.Class 

,其是具有

@Entity(name = "X")? 

換句話說在運行時使用的實體名稱來獲得實體的類名,當然一個:)

+0

有趣的是,可能回答這個問題完全如果你通過所有的答案閱讀:http://stackoverflow.com/questions/4296910/is-it-it-read-the-value-of-a-annotation-in-java。 – Gimby

回答

4

全部註冊@Entity s可通過MetaModel#getEntities()獲取。它返回List<EntityType<?>>,其中EntityTypegetName()方法代表@Entity(name)getJavaType()代表相關的@Entity類。 MetaModel實例由EntityManager#getMetaModel()提供。

換句話說,這裏是在實用工具方法的味道方法:

public static Class<?> getEntityClass(EntityManager entityManager, String entityName) { 
    for (EntityType<?> entity : entityManager.getMetamodel().getEntities()) { 
     if (entityName.equals(entity.getName())) { 
      return entity.getJavaType(); 
     } 
    } 

    return null; 
} 
+0

這個解決方案有效,但是我們有成千上萬的實體並且每次循環都很昂貴,,,, – amitsalyan

+1

@amitsalyan:如果您需要多次執行映射,很容易將映射中的映射緩存在實體名稱爲鍵的映射中,和Class實例作爲值 – OndrejM