2011-04-06 85 views
4

我正在尋找一種方法在運行時獲取有關我的hibernate實體類的信息。詳細我需要像在運行時獲取有關實體的休眠信息

類ABC具有特性a,b和c。與c是一個 列表和關聯於類XYZ

爲類

public class ABC { 
    private int a; 
    private String b; 

    @OneToMany 
    Private List<XYZ> c; 
} 

信息所有這些都是運行時需要的。我確信Hibernate在運行時知道所有這些,但我不知道如何獲取這些信息。

+0

感謝您的提示夥計 - 多數民衆贊成我所期待的! – Erik 2011-04-07 16:05:15

回答

3
PersistentClass userMapping = cfg.getClassMapping(ABC.class); 

cfg是Hibernate Configuration的一個實例。

PersistentClass有您需要的所有信息。

0

看起來像反射是你以後的事情,它並不是冬眠後的特定信息。您只需要關於該課程有哪些字段以及它們是哪些類型的信息...

+0

向你反映需要注意的是,一些ORM解決方案使用bytec操作來添加字段,以便於更改跟蹤和延遲加載等操作。你可能會發現更多,你正在尋找與反思一個人。這是JPA 2規範引入元模型的原因之一:http://stackoverflow.com/questions/5564955/getting-hibernate-information-about-entites-at-runtime/5567136#5567136 – 2011-04-06 20:48:21

0

您可以使用反射來獲取此信息。

Class abcClass= ABC.class; 
Field[] fields = abcClass.getDeclaredFields(); 
+0

是的,但只有部分。特別是關於關聯中泛型類型的信息由於類型擦除而被隱藏。 – Erik 2011-04-07 16:04:24

2

如果您使用Hibernate作爲JPA 2提供程序,那麼您可以使用JPA 2元模型(javax.persistence.metamodel)。這將從JPA元數據爲您提供有關您的JPA實體的信息:

entityManager.getMetamodel().entity(entityClass). getAttributes();