Как мне создать индекс для таблиц соединения, используя аннотации Hibernate? - PullRequest
8 голосов
/ 09 декабря 2010

У меня есть следующие отношения с использованием аннотаций 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

Кто-нибудь знает, как создавать индексы для внешних ключей JoinTable с использованием Hibernate?

1 Ответ

8 голосов
/ 22 декабря 2010

Это не совсем тот ответ, который вы хотели бы получить, но это ожидаемое поведение. Другими словами: это не поддерживается. См. Следующую JIRA для более подробной информации:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...