我试图将具有一组字符串的对象持久化到数据库,我发现必须使用@ElementCollection
来执行此操作,但因为我使用.hbm.xml
通过我的所有项目配置文件我想使用xml
来完成它。
此问题Hibernate, List<String>显示了如何通过注释执行此操作,此链接http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection提供了使用xml执行此操作的提示。但是当我尝试使用<element-collection>
时,我的eclipse IDE并没有接受它,并在元素<class/>
上给出了一个错误,上面写着the contents of element class must match ...
我的班级就像这样
public class Role {
private Long id;
private Integer version;
private String name;
private Set<String> menuItems;
/** getters and setters **/
我的Role.hbm.xml
是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.element.collection.beans">
<class name="Role" table="Role">
<id name="id" type="java.lang.Long" column="id">
<generator class="org.hibernate.id.TableHiLoGenerator">
<param name="table">HibernateUniqueKey</param>
<param name="column">NexHiValue</param>
</generator>
</id>
<version name="version" column="Version" />
<property name="name" column="name" type="java.lang.String"
not-null="true" length="128" />
<element-collection name="menuItems">
<collection-table>menuItems</collection-table>
</element-collection>
</class>
这是集合的最后一个映射,其余的没有改变
<set name="menuItems" sort="unsorted" table="menuItems" lazy="false">
<key column="itemId" />
<element column="itemName" type="string" />
</set>
答案 0 :(得分:3)
检查文档:
来自该来源的例子:
<set name="aliases"
table="person_aliases"
sort="natural">
<key column="person"/>
<element column="name" type="string"/>
</set>
答案是<element>
<element>
使用映射文件标记集合值此<element>
可用于任何类型的集合映射,例如<bag>
<set>
<list>
...
也可能很有趣:Understading the restrictions for collection of dependent objects in hibernate ...
基于更多细节,我们可以说,这里的映射就像:
<class name="Role" table="Role">
...
<set name="menuItems" sort="unsorted" table="menuItems" lazy="false">
<key column="menuId" /> // not itemId
<element column="itemName" type="string" />
</set>
</class>