小编典典

如何使用Hibernate批注在联接表上创建索引?

hibernate

我使用Hibernate批注具有如下关系,这是我尝试过的:

public class Job{

...

@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "jobs_resource_locations")
@ForeignKey(name = "job_inputs_fk")
@Index(name="job_inputs_fk")
private List<FileSystemLocation> inputs;

这样的事情在ManyToOne上效果很好,如下所示:

@ManyToOne
@JoinColumn(name = "service_call_id", referencedColumnName = "id")
@ForeignKey(name = "job_service_call_fk")
@Index(name = "job_service_call_fk")
private ServiceCall serviceCall;

我想确保外键在PostgreSQL上被索引,并且架构在MySQL上看起来相似,因此@ForeignKey和@Index具有相同的名称(MySQL始终创建与FK具有相同名称的索引)。

我无法在反面创建索引,因为FileSystemLocation不了解这种关系。因此,JoinTable。

前一个示例失败,因为Hibernate在Job中找不到要索引的列:

org.hibernate.MappingException: Unable to find logical column name from physical name null in table jobs

有谁知道如何使用Hibernate在JoinTable外键上创建索引?


阅读 263

收藏
2020-06-20

共1个答案

小编典典

这并不是您想要收到的答案,但这是预期的行为。换句话说:不支持此功能。有关更多详细信息,请参见以下JIRA:

https://hibernate.atlassian.net/browse/HHH-4263

2020-06-20