开发者

Placing List Index when using List in Hibernate

I was using a Set but now due to a widget restriction, I need to use a list.a a sample of my mapping file using A SET and a List are as follows. Can someone help me to place the list index. I am getting some confusion.

**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>

Category Mapping File using list without the list index

<?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>

Attribute Mapping File using list with not list index

<?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>


Read Hibernate Reference: 6.2.3. Indexed collections

For Example:

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


The Hibernate 3.3 reference says "The index of an array or list is always of type integer...", and also "If your table does not have an index column, and you still wish to use list as the property type, you can map the property as a Hibernate <bag>."

A example of 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>


I think you should give "index" property in POJO for which you are creating one-to-many relation

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

In above example , "WhatEver_Class" POJO should have a index property , and it's hbm file should have below property tag.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜