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" />