根据Hibernate documentation,我们可以使用<composite-map-key>
标记将组件用作地图的关键字。所以我尝试创建一个程序来理解它是如何工作的,但却陷入了如何创建映射文件的困境。
我已经宣布了一个pojo类:
Person.java
public class Person {
private java.util.Date birthday;
private Map<Name, String> someNames = new HashMap<Name,String>();
private int id;
// Setters & Getters
}
组件类Name.java
:
public class Name {
String first;
String last;
// Setters & Getters
}
我尝试创建映射文件,但我不确定它应该是什么样子,这里的文件不正确:
<hibernate-mapping>
<class name="Person" table="test_person">
<id name="id" column="pid" type="int">
<generator class="increment" />
</id>
<property name="birthday" type="date" />
<map name="someNames" table="test_person_names">
<key column="person_id"></key>
<composite-map-key class="Name">
<key-property name="first" column="first1"></key-property>
<key-property name="last" column="last1"></key-property>
</composite-map-key>
<property name="initial" column="initial1" />
</map>
</class>
</hibernate-mapping>
当我试图获得会话工厂时,我得到一个例外说:
引起:org.xml.sax.SAXParseException:元素类型的内容 “地图”必须匹配 “(元*,子查询,缓存,同步*,评论,钥匙,(地图键?|?复合地图键|地图琴键许多一对多|首页|复合指数|指数多对一一对多|索引一对多到任意),(元件|一个一对多|许多一对多|复合元件|?许多到任何),装载机,SQL插入,SQL的更新? ?,SQL-删除?,SQL-删除-所有?,滤波器*)”。
有人可以帮助我,我们如何使用composite-map-key
将组件用作地图的键?
答案 0 :(得分:1)
这一行错了:
<property name="initial" column="initial1" />
应该是:
<element type="string" column="initial1" />
其他事项:记得实施equals
&amp; hashCode
中的Name
。