2011-02-03 2 views
1

Я использую JPA через Play Framework с Mysql.JPA: индексирование другим полем таблицы, на которое ссылается внешний ключ

Скажем, у меня есть запрос JQL следующим образом:

SELECT p FROM Person p WHERE p.address.city = 'New York' 

Адресное поле является внешним ключом ссылкой на таблицу адресов.

Я понимаю, что для этого запроса потребуется сканирование таблицы всей таблицы Person, «разыменование» поля «адрес», а затем выполнение сканирования таблицы адресов. Даже если поле города на объекте Address проиндексировано, мы по-прежнему смотрим на проверку всей таблицы Person.

Я хотел бы сделать этот запрос быстро, каким-то образом создав индекс на p.address.city в таблице Person, возможно ли это в JPA/MySql?

+0

Вы нашли разрешение? – user482745

ответ

0

Я считаю, что это так, если вы используете Hibernate вы можете использовать их аннотацию

@org.hibernate.annotations.Table(
    name="table_name", 
    indexes = { @Index(name="idx_", columnNames = { "xxx", "xx" }) } 
    ) 

или @Index аннотированный в столбце (помещается в модели) от org.hibernate.annotations пакета

Я надеюсь, что это помогает

+0

Правильно, вот как вы создаете простой индекс, но как вы создаете индекс для столбца в чужой таблице? – sanity

+0

Ну, вы установили отношения? Я думал, что когда-то в рамках ORM автоматически установит индексирование, по крайней мере, когда я посмотрю на свою схему, Hibernate настроил ее. Возможно, я просто не понимаю ваш вопрос. – allenskd

+1

Я думаю, что ORM установит индекс для поля «адрес» в Person, который содержит первичный ключ объекта Address. Однако он не будет устанавливать индекс для поля «city» объекта адреса в объекте Person, поэтому для вышеуказанного запроса потребуется сканирование таблицы объекта Person. – sanity

 Смежные вопросы

  • Нет связанных вопросов^_^