[英]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.