Java 如何使用<;复合地图键>;冬眠

Java 如何使用<;复合地图键>;冬眠,java,hibernate,Java,Hibernate,根据,我们可以使用标记将组件用作地图的键。因此,我试图创建一个程序来理解它是如何工作的,但却被困在如何创建映射文件上 我已为以下项目声明了pojo类: Person.java public class Person { private java.util.Date birthday; private Map<Name, String> someNames = new HashMap<Name,String>(); private int id;

根据,我们可以使用
标记将组件用作地图的键。因此,我试图创建一个程序来理解它是如何工作的,但却被困在如何创建映射文件上

我已为以下项目声明了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   
}
我试图创建映射文件,但我不确定它应该是什么样子,以下是不正确的文件:

<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.saxpasseeption:元素类型的内容 “地图”必须匹配 “(meta*、subselect?、cache?、synchronize*、comment?、key、(映射键|复合映射键|映射键多对多|索引|复合索引|索引多对多|索引多对任意),(元素|一对多|多对多|复合元素|多对任意)、加载器?、sql插入?、sql更新?、sql删除?、sql全部删除?、过滤器*)”

有人能帮助我如何使用组合映射键来使用组件作为映射键吗?

这行是错误的:

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

应该是:

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


其他事项:记住在
Name

中实现
equals
&
hashCode
,非常感谢,它很有效。由于在线文档不清楚,您能告诉我是否还有其他在线材料或书籍可供我参考吗?互联网上似乎没有
复合地图键
的教科书示例,因此很抱歉,我没有任何可靠的资料。在这种情况下,我通常会严格检查映射并验证它是否符合DTD(就像在这种情况下,问题是
必须包含
,而不是
)。ok,现在了解了如何检查这类问题。谢谢你,海基姆
<element type="string" column="initial1" />