Создайте индекс для столбца CollectionTable, используя Hibernate - PullRequest
5 голосов
/ 10 декабря 2010

Предположим, у меня есть следующая сущность, которая моделирует подписчика и использует CollectionTable для моделирования списка подписок, например, так:

@Entity
@Table(name = "SUBSCRIBER")
public class Subscriber {
    @ElementCollection
    @CollectionTable(name = "PERSON_ORG_SUBSCRIPTIONS",
                     joinColumns = { @JoinColumn( name = "PERSON_ID", referencedColumnName = "PERSON_ID" ),
                                     @JoinColumn( name = "ORG_ID", referencedColumnName = "ORG_ID" ) } )
    @Column(name = "SUBSCRIPTION_NAME")
    protected Set<String> _subscriptionNames;
}

Таким образом, создается таблица со столбцами для PERSON_ID, ORG_ID и SUBSCRIPTION_NAME.

Я пытаюсь создать индекс базы данных для столбца SUBSCRIPTION_NAME.Но если я добавлю следующую аннотацию на _subscriptionNames:

@org.hibernate.annotations.Index( name="subscription_idx", columnNames={"SUBSCRIPTION_NAMES"} )

, я получу исключение:

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

Я также попытался использовать аннотацию org.hibernate.annotations.Table для сущности Subscriber, но, похоже, нет способа заставить его ссылаться на таблицу PERSON_ORG_SUBSCRIPTIONS.

Я использую Hibernate 3.5.3 и PostgreSQL 9.0.

1 Ответ

0 голосов
/ 30 декабря 2011

Есть ли в таблице SUBSCRIBER столбец с именем "SUBSCRIPTION_NAME"?

Планируете ли вы создать индекс по таблице из кода? Вы, вероятно, должны использовать hibernate.hbm2ddl.auto = create

...