【问题标题】:Create index on column in one-to-many relationship在一对多关系中的列上创建索引
【发布时间】:2014-11-16 02:22:54
【问题描述】:

我在两个类之间有一对多的关系,如下所示:

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 列上创建一个列索引(不是列表索引)。似乎&lt;one-to-many&gt; 标签不允许任何嵌套的&lt;column&gt; 标签,所以我尝试向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 列上创建索引而不向Child 类添加parent 字段?我正在使用 Hibernate 3.5.6 和 PostgreSQL 9.3。

【问题讨论】:

  • 您如何想象在不存在的列上有索引?如果要进行双向关联或索引,则需要在子类中有 parent_id。
  • 有一个parent_id 列。它似乎是由&lt;one-to-many&gt; 标签创建的。

标签: java hibernate postgresql orm


【解决方案1】:

起初我没有得到你要找的东西,但我想我明白了。

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

希望对您有所帮助。

【讨论】:

  • 完美!谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
相关资源
最近更新 更多