Я пытаюсь преобразовать часть уровня доступа к данным в режим гибернации и сталкиваюсь с некоторыми проблемами, связанными с правильной ассоциацией коллекции.Я использую аннотации hibernate и имею две сущности, которые связаны (базовая конфигурация здесь работает, только не соединение).Некоторые имена были запутаны:
Spring 3, Hibernate 3, Java 6, MySQL 5.
Контейнер имеет список видео.Оба этих класса отображаются в спящем режиме с аннотациями.
К сожалению, таблица сопоставления имеет необычную схему.Это выглядит так:
container_mapping:
+-----------------+------------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+-------------------+-------+
| internal_id | int(10) unsigned | NO | PRI | | |
| external_id | varchar(255) | NO | PRI | | |
| mapping_type_id | int(4) unsigned | NO | PRI | | |
| creation_date | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------------+------------------+------+-----+-------------------+-------+
internal_id сопоставляется с container.id и external_id сопоставляется с video.id, когда mapping_type_id = 2
Запрос на откат по id:
select * from container c, container_mapping cm, video v where cm.mapping_type_id=2 and c.episode_id = cm.internal_id and cm.external_id = v.id and c.episode_id=?;
Кажется, я не могу найти хороший пример того, как объединение коллекции с полем объединения, имеющим определенное значение.На данный момент я хватаюсь за соломинку.(Неполная) версия находится здесь:
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="container_mapping",
joinColumns = @JoinColumn(name="external_id"))
private List<Video> videos = Lists.newArrayList();
У кого-нибудь есть какие-либо указания о том, как действовать?