kma*_*oor 7 sql database optimization hibernate jpa
Hibernate允许使用来通过@ManyToOne映射添加索引@org.hibernate.annotations.Index。
有没有一种方法可以为@ManyToMany关系中的连接表指定索引?
如果Entity A和Entity 的拥有方B为@ManyToManywith A,则联接表将具有复合索引(a1,b1)。
我想知道这是否足够,还是需要创建另一个索引(b1,a1)?
我也在寻找这个 - 似乎是圣杯。
在这篇文章中: 如何让 Hibernate 在外键 (JoinColumn) 上创建索引?一个回答者似乎相信将 @Index 添加到集合中会在连接表上创建一个索引。它没有。
这篇文章: 如何使用 Hibernate 注释在连接表上创建索引?揭示了我逐渐相信的是可怕的事实。这是不可能的,除非您恢复使用 hbm.xml 文件来定义您的实体(即:似乎无法使用注释)。
因此,虽然在连接表上建立复合索引确实极大地加快了查询速度,包括两个 FK 列,但目前还没有办法使用注释自动创建所述索引。
我现在正在研究创建一个任务,在 Hibernate 的 ExportSchema 执行之后使用它来识别连接表和创建索引。进展不顺利!请分享您碰巧遇到的任何可行的解决方案。我希望有人会分享他们的比较方法。
小智 6
在这里回答一个6岁的问题,但仍然很重要。我在面对同一问题时遇到了这个问题。搜索Web使其看起来好像JPA不支持联接表上的索引,但它确实支持,这在此处记录。
使用@JoinTable时,可以在注释上指定索引,例如
@ManyToMany()
@JoinTable(name = "car_driver",
joinColumns = @JoinColumn(name = "car_id"),
inverseJoinColumns = @JoinColumn(name = "driver_id"),
indexes = {
@Index(name = "idx_car_driver_car_id", columnList = "car_id"),
@Index(name = "idx_car_driver_driver_id", columnList = "driver_id")
}
)
private Set<Driver> drivers;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4448 次 |
| 最近记录: |