假设我有一个实体Country扩展实体。每个实体都应该有某种元数据(翻译,描述,创建等......)。
<class name="Country" table="COUNTRIES" schema="EDRIVE" dynamic-update="false" dynamic-insert="true" batch-size="30">
<meta attribute="class-description">
This class contains countries
</meta>
<id name="id" type="long" column="id">
<generator class="identity" />
</id>
<property name="isoCode2" column="isocode2" type="string" length="2"/>
<property name="isoCode3" column="isocode3" type="string" length="3"/>
<property name="telephoneCode" column="telephonecode" type="int"/>
<property name="timezone" column="timezone" type="boolean"/>
<!--+
| CountriesMetaData
+-->
<map name="metaData" fetch="join" cascade="all" batch-size="10" table="CountriesMetaData">
<key column="entityId"/>
<map-key-many-to-many column="languageId" class="Language"/>
<one-to-many entity-name="countriesMetaData"/>
</map>
</class>
这是我对国家/地区的映射:
<class name="EntityMetaData" entity-name="countriesMetaData" table="COUNTRIESMETADATA" lazy="false">
<id name="id" type="long" column="id" access="field">
<generator class="identity" />
</id>
<property name="name" column="name" type="string" length="256" />
<property name="description" column="description" type="string" length="512"/>
<many-to-one name="language" class="Language" column="languageid" not-null="true"/>
</class>
和EntityMetaData:
List<Country> countryList = (List<Country>)databaseUtilities.getSession()
.createQuery("FROM Country c JOIN FETCH c.metaData m")
.list();
所以,我需要的是:我希望有一个国家名单,包括所有他们的元数据。我使用以下HQL:
EntityMetaData entityMetaData = metaData.get(locale.getDisplayName());
^^^^^^^^^^^^
Hibernate也选择了所有东西(我甚至看到所有的集合都在debug中初始化),但是Country.metaData仍然是PersistentMap(而不是我想要的HashMap),当我尝试时,我收到null:
{{1}}
如何解决此问题?
谢谢。
P.S。 Hibernate 5.0.3.Final
答案 0 :(得分:0)
PersistentMap是Map的包装器,您可以轻松地检索它。你试过这个吗?
Map metaData = country.getMetaData();