Hibernate 5:如何在HQL中加入HashMap?

时间:2015-12-21 21:15:46

标签: hibernate join hql hibernate-mapping

假设我有一个实体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

1 个答案:

答案 0 :(得分:0)

PersistentMap是Map的包装器,您可以轻松地检索它。你试过这个吗?

Map metaData = country.getMetaData();

相关问题