2014-09-22 56 views
2

我有這樣兩個類之間的一個一對多的關係:在一個一對多的關係上創建列索引

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_id列上創建索引而不將parent字段添加到Child類中?我使用Hibernate 3.5.6和PostgreSQL 9.3。

+0

你如何想象在不存在的列上有索引? 如果您想擁有雙向關聯或索引,您需要在子類中擁有parent_id。 – 2014-09-22 07:50:28

+0

有一個'parent_id'列。它似乎是由''標籤創建的。 – z0r 2014-09-23 08:48:19

回答

2

起初我沒有明白你在找什麼,但我想我知道了。

您定義了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> 

希望它能幫助。

+0

完美!感謝那。 – z0r 2014-09-23 23:57:18

相關問題