我在这两个类之间有一对多的关系:
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 :(得分:4)
起初我没有得到你想要的东西,但我想我想出来了。
您定义了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>
希望它有所帮助。