【问题标题】:How to define an index for the child table如何为子表定义索引
【发布时间】:2015-05-31 10:01:31
【问题描述】:

我遇到了一个情况。下面定义了父级和从父级派生的子级。由于父级有@Table 注释,我可以定义索引。但是由于 child 中没有 @Table 注释,我如何为该子列定义索引。我认为使用@SecondaryTable 注释但我认为@InheritanceType.SINGLE_TABLE 没有用,因为将创建另一个子表。如果我在某处错了,请纠正。另外,如果有任何子索引问题的解决方案。

@Table(name = "Parent", indexes = {@Index(name = "IDX_USERNAME", columnList = "username")})
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
@Entity
public class Parent{
}

@Entity
@DiscriminatorValue("C")
public class Child extends Parent{
}

【问题讨论】:

  • 你在Parent类的Table注解中定义索引。有一个表,这就是它的定义位置。
  • 感谢您的回答,但我无法在子类上定义索引。只是好奇,因为它有助于代码理解并且看起来更干净
  • 不,我认为这不可能。一个更好的主意是使用 FlywayDB 或 Liquibae 来定义您的架构。
  • 再次感谢您的回答

标签: java hibernate jpa indexing hibernate-mapping


【解决方案1】:

唯一的方法是使用Hibernate特定的@Index annotation

@org.hibernate.annotations.Index(name = "CHILD_NAME_IDX", columnNames = "name")
private String name;

此注释已弃用,但您可以将其应用于字段或方法。

【讨论】:

  • 感谢您的回答。实际上,我看到了这种弃用,而且我认为 Hibernate 提供了一些其他注释,所以这就是想在这里问的原因)))
  • JPA 等效项不适用于字段,因此并不完全相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2012-03-24
  • 2020-01-02
  • 2018-11-08
  • 2015-04-21
相关资源
最近更新 更多