2010-12-17 53 views
4

我正在使用Set,但现在由于小部件限制,我需要使用list.a 我的映射文件使用SET和List的示例如下。有人可以帮我放置列表索引。我有些困惑。使用列表在休眠状态下使用列表时配置列表索引

**Attribute Mapping File using Set** 
?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 16, 2010 5:25:09 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="h.Attribute" table="ATTRIBUTE"> 
     <id name="AttributeId" type="long"> 
      <column name="ATTRIBUTEID" /> 
      <generator class="native" /> 
     </id> 
     <property name="AttributeName" type="java.lang.String"> 
      <column name="ATTRIBUTENAME" /> 
     </property> 
     <set name="Options" table="ATTRIBUTEOPTION" inverse="false" cascade="all" lazy="true"> 
      <key> 
       <column name="ATTRIBUTEID" /> 
      </key> 
      <one-to-many class="h.AttributeOption" /> 
     </set> 
    </class> 
</hibernate-mapping> 



**Category Mapping File using Set** 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 16, 2010 8:37:02 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="h.Category" table="CATEGORY"> 
     <id name="CategoryId" type="long"> 
      <column name="CATEGORYID" /> 
      <generator class="native" /> 
     </id> 
     <property name="CategoryName" type="java.lang.String"> 
      <column name="CATEGORYNAME" /> 
     </property> 

     <many-to-one name="ParentCategory" class="h.Category"> 
      <column name="PARENT_CATEGORY_ID" /> 
     </many-to-one> 

     <set name="SubCategory" lazy="true" cascade="all-delete-orphan" inverse="true"> 
      <key> 
       <column name="PARENT_CATEGORY_ID" /> 
      </key> 
      <one-to-many class="h.Category" /> 
     </set> 

     <set name="AllAttributes" table="ATTRIBUTE" inverse="false" lazy="true" cascade="all"> 
      <key> 
       <column name="CATEGORYID" /> 
      </key> 
      <one-to-many class="h.Attribute" /> 
     </set> 

    </class> 
</hibernate-mapping> 

分类映射文件,而不列表索引

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 17, 2010 2:10:50 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="h.Category" table="CATEGORY"> 
     <id name="CategoryId" type="long"> 
      <column name="CATEGORYID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="CategoryName" type="java.lang.String"> 
      <column name="CATEGORYNAME" /> 
     </property> 
     <many-to-one name="ParentCategory" class="h.Category" fetch="join"> 
      <column name="PARENTCATEGORY" /> 
     </many-to-one> 
     <list name="SubCategory" inverse="false" table="CATEGORY" lazy="true"> 
      <key> 
       <column name="CATEGORYID" /> 
      </key> 
      <list-index></list-index> 
      <one-to-many class="h.Category" /> 
     </list> 
     <list name="AllAttributes" inverse="false" table="ATTRIBUTE" lazy="true" cascade="all"> 
      <key> 
       <column name="CATEGORYID" /> 
      </key> 
      <list-index></list-index> 
      <one-to-many class="h.Attribute" /> 
     </list> 
    </class> 
</hibernate-mapping> 

使用清单,就不一一列举指数

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 17, 2010 2:10:50 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="h.Attribute" table="ATTRIBUTE"> 
     <id name="AttributeId" type="long"> 
      <column name="ATTRIBUTEID" /> 
      <generator class="assigned" /> 
     </id> 
     <property name="AttributeName" type="java.lang.String"> 
      <column name="ATTRIBUTENAME" /> 
     </property> 
     <list name="Options" inverse="false" table="ATTRIBUTEOPTION" lazy="true" cascade="all"> 
      <key> 
       <column name="ATTRIBUTEID" /> 
      </key> 
      <list-index></list-index> 
      <one-to-many class="h.AttributeOption" /> 
     </list> 
    </class> 
</hibernate-mapping> 
+0

还有一两件事,我没有使用任何索引! – Noor 2010-12-17 10:28:33

+0

您已发布3个关于此映射的问题,请问您的答案是否有帮助? – Ralph 2010-12-17 12:29:35

+0

不幸的是 – Noor 2010-12-17 16:08:11

回答

5

Hibernate Reference: 6.2.3. Indexed collections

属性映射文件

例如:

<list name="whatEver"> 
     <key column="whatEver_fk"/> 
     <index column="idx"/> 
     <one-to-many class="WhatEver"/> 
    </list> 
+0

不幸的是没有工作 – Noor 2010-12-17 12:41:57

+2

Hibernate Reference不工作? - 很奇怪 – Ralph 2010-12-20 07:56:42

2

我觉得你应该给“指数”在POJO属性为您创建一个一对多的关系

<list name="whatEver"> 
     <key column="whatEver_fk"/> 
     <index column="idx"/> 
     <one-to-many class="WhatEver_Class"/> 
    </list> 

在上面的例子中,“WhatEver_Class” POJO应该有一个索引属性,它的hbm文件应该有下面的属性标记。

<property name="index" type="long" insert="false" update="false"> 
      <column name="idx" /> 
     </property> 
2

Hibernate 3.3 reference说:“一个数组或列表的索引必须是类型整数 ......的”,也“如果你的表没有一个索引字段,当你仍然希望使用列表作为属性类型,您可以将该属性映射为Hibernate <bag>。“

袋的例子:

<bag name="options" table="ATTRIBUTEOPTION" order-by="column_name asc|desc" inverse="true" lazy="true" fetch="select"> 
    <key column="ATTRIBUTEID" /> 
    <one-to-many class="h.AttributeOption" /> 
</bag>