如何在没有索引列的情况下按XML设置List对象的"一对多"映射

zon*_*ono 4 java hibernate jpa hibernate-mapping

我可以使用注释设置List对象的"一对多"映射,但是不使用XML.你能告诉我如何设置使用XML映射吗?任何帮助将不胜感激.

题.当我使用XML映射关联一些List对象时,是否需要"INDEX"列?

注释映射 - >它按预期工作:

@Entity
@Table(name = "ITEM")
public class Item {

    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @OneToMany(targetEntity = ItemDetail.class)
    @JoinColumn(name = "ITEM_ID")
    private List<ItemDetail> itemDetails;

@Entity
@Table(name = "ITEM_DETAIL")
public class ItemDetail {

    @Id
    @Column(name = "ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "ITEM_ID")
    private Long itemId;
Run Code Online (Sandbox Code Playgroud)

XML映射 - >它不能按预期工作."发生错误解析XML"错误.它似乎需要"INDEX列"信息:

<hibernate-mapping>
    <class name="jp.sample.entity.Item" table="ITEM">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="NAME" />
        </property>

        <list name="itemDetails" cascade="all">
            <key column="ITEM_ID" />
            <one-to-many class="jp.sample.entity.ItemDetail" />
        </list>

    </class>
</hibernate-mapping>

<hibernate-mapping>
    <class name="jp.sample.entity.ItemDetail" table="ITEM_DETAIL">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="NAME" />
        </property>
        <property name="itemId" type="java.lang.Long">
            <column name="ITEM_ID" />
        </property>
    </class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

mat*_*t b 7

一个<list>在Hibernate映射XML文件要求<list-index>,因为你是在告诉Hibernate的要映射的有序集合.

如果您不关心集合中元素的位置,您应该使用a <bag>,或者如果您将Java类中的集合类型更改Set<set>:

如果您的表没有索引列,并且您仍希望将其List用作属性类型,则可以将该属性映射为Hibernate <bag>.从数据库中检索包时,包不会保留其顺序,但可以选择对其进行排序或排序.