如何在hibernate中使用<composite-map-key> </composite-map-key>

时间:2014-09-04 07:17:32

标签: java hibernate

根据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将组件用作地图的键?

1 个答案:

答案 0 :(得分:1)

这一行错了:

<property name="initial" column="initial1" />

应该是:

<element type="string" column="initial1" />

其他事项:记得实施equals&amp; hashCode中的Name