我可以使用注释设置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;
XML映射 - &gt;它没有按预期工作。 “发生错误解析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>
答案 0 :(得分:7)
Hibernate Mapping XML文件中的<list>
需要<list-index>
,因为您告诉Hibernate您想要map an ordered collection。
如果您不关心集合中元素的位置,则应使用<bag>
,或者如果将Java类中的集合类型更改为Set
,则{{1 }}:
如果您的表没有索引列,并且您仍希望使用
<set>
作为属性类型,则可以将该属性映射为HibernateList
。从数据库中检索包时,包不会保留其订单,但可以选择对其进行排序或订购。