0
想,我有一個實體,延伸全國的實體。每個實體都應該有某種元數據(翻譯,描述,創建等)。休眠5:如何加入的HQL一個HashMap?
public abstract class Entity<T> implements Serializable {
protected Map<Language,EntityMetaData> metaData;
// constructors, setters, getters etc.
}
public class Country extends Entity<Long> implements Serializable {
// some fields
// constructors, setters, getters etc.
}
public class EntityMetaData extends Entity<Long> implements Serializable {
private String name;
private String description;
private Language language;
// constructors, setters, getters etc.
}
這裏是我的國家測繪:
<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>
和EntityMetaData:
<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>
所以,我需要什麼:我想與所有他們metadatas一個國家名單。我用下面的HQL:
List<Country> countryList = (List<Country>)databaseUtilities.getSession()
.createQuery("FROM Country c JOIN FETCH c.metaData m")
.list();
Hibernate的一切選擇,以及(我甚至看到在調試初始化所有集合),但仍Country.metaData PersistentMap(而不是HashMap中我想要的),我收到空當我嘗試到:
EntityMetaData entityMetaData = metaData.get(locale.getDisplayName());
^^^^^^^^^^^^
如何解決此問題?
謝謝。
P.S.休眠5.0.3.Final
是的,我做了。它返回PersistentMap。 – maksim2020
在事務內部,執行查詢之後? PersistentMap將會話和地圖包裝在一起。您需要會話對象從包裝中提取地圖。 – Felix
我明白你的意思。我正在重寫我的DAOImpl類以便在一個事務中執行轉換。有關詳細信息,請參閱http://stackoverflow.com/questions/21703851/how-to-fetch-a-map-in-hibernate。 – maksim2020