簡體   English   中英

以一對多關系在列上創建索引

[英]Create index on column in one-to-many relationship

我有兩個類之間的一對多關系,如下所示:

class Parent {
    List<Child> children;
}

class Child {
    String name;
}

我正在使用.hbm.xml文件來定義從Java類到表的映射。 像這樣的東西:

<class name="Parent" table="parent">
    <list name="children">
        <key column="parent_id" />
        <list-index column="idx" />
        <one-to-many class="Child" />
    </list>
</class>

<class name="Child" table="child">
    <property name="name" type="string" />
</class>

這很好。

現在我想在Child.parent_id列上創建列索引(而不是列表索引)。 似乎<one-to-many>標記不允許任何嵌套的<column>標記,因此我嘗試向Child映射添加雙向關聯,如下所示:

<many-to-one name="parent" insert="false" update="false">
    <column name="parent_id" index="true">
</many-to-one>

但我得到一個例外:

 org.hibernate.PropertyNotFoundException: Could not find a getter for parent in class Child

那么,如何在不向Child類添加parent字段的情況下在Child.parent_id列上創建索引? 我正在使用Hibernate 3.5.6和PostgreSQL 9.3。

起初我沒有得到你想要的東西,但我想我明白了。

您定義了list-index ,用於保存java.util.List的索引,而不是Child的parent_id。 所以你正在尋找如何創建真正的數據庫索引。 這可以通過這樣的注釋輕松完成;

@OneToMany(cascade = { CascadeType.ALL })
@JoinColumn(name="parent_id")
@Index(name = "idx_parent_id", columnNames = "parent_id")
private List<Child> images = new ArrayList<Child>(); 

在xml配置看起來像,

  <list name="children">
   <key>
    <column index="parent_id_idx" name="parent_id"/>
   </key>
   <list-index column="idx"/>
   <one-to-many class="hr.winkme.server.model.entities.Child"/>
  </list>

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM