我正在尝试使用this帖子中描述的Top Level Collections
概念:
以下是该帖子的一部分内容:
顶级收藏
顶级集合是在范围之外定义的集合 个人班级,可供所有班级使用 映射文件。方案
我们有一个类,Foo和一系列字符串(例如人物 我们希望在没有的情况下提供给其他课程的名称) 不断在每个内部声明集合定义。
Set Foo.getNames() // of String instances
<set role="names" table="names">
<key column="id" type="string">
<generator class="uuid.hex"/>
</key>
<element column="name" type="string"/>
</set>
<class name="Foo" table="foo">
...
<collection name="names" column="name_id" role="names"/>
</class>
请注意,顶级集合需要自己的密钥生成器 这不能是指定的类型,因为它永远不会暴露给 调用应用程序。
同样,Person并不代表一个类。它只是一个集合 第二级持久对象 - 在本例中为Strings。另请注意 Names只是id而不是foo_id。这是为了让它被使用 各种课程。另外,因为我们不能使用Person的id作为 foo_id,我们在Foo中添加了person_id FK。双向性
这里没有双向关系,因为只有 涉及一个班级。
当我尝试在<set>
元素上方的映射中使用<class>
元素时,我开始收到错误。我认为hibernate无法识别<set>
元素之外的<class>
。
任何人都知道如何使用Top Level Collections
?
请帮忙!
答案 0 :(得分:0)
根据不再存在的网站上的信息,该备忘单是一个非常古老的备忘单。
我从2002年开始讨论Gavin King在hibernate 2中讨论不再支持它:http://www.mail-archive.com/hibernate-devel@lists.sourceforge.net/msg01188.html
在hibernate-mapping-1.1.dtd中,(可从http://www.jboss.org/dtd/hibernate/获得)最重要的元素是:
<!ELEMENT hibernate-mapping (
(map|set|list|bag|array|primitive-array)*,
class*,
query*
)>
在hibernate-mapping-2.0.dtd中,它是:
<!ELEMENT hibernate-mapping (
meta*,
import*,
(class|subclass|joined-subclass)*,
query*,
sql-query*
)>
在hibernate-mapping-3.0.dtd中:
<!ELEMENT hibernate-mapping (
meta*,
identifier-generator*,
typedef*,
filter-def*,
import*,
(class|subclass|joined-subclass|union-subclass)*,
resultset*,
(query|sql-query)*,
filter-def*,
fetch-profile*,
database-object*
)>
hibernate中的顶级集合很久以前就被埋没了。