java 在 Hibernate 中使用 List 时放置 List 索引
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4469545/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Placing List Index when using List in Hibernate
提问by Noor
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.
我正在使用 Set 但现在由于小部件限制,我需要使用一个 list.aa 使用 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>
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>
回答by Ralph
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>
回答by Chin Hung
The Hibernate 3.3 referencesays "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 listas the property type, you can map the property as a Hibernate <bag>
."
在Hibernate的3.3引用说“数组或列表的索引必须是类型整数...”,并“如果你的表没有一个索引字段,当你仍然希望在使用列表作为属性类型,你可以将该属性映射为 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>
回答by ved
I think you should give "index" property in POJO for which you are creating one-to-many relation
我认为您应该在要为其创建一对多关系的 POJO 中提供“索引”属性
<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.
在上面的例子中,"WhatEver_Class" POJO 应该有一个索引属性,它的 hbm 文件应该有下面的属性标签。
<property name="index" type="long" insert="false" update="false">
<column name="idx" />
</property>