Мне нужно связать объект с двумя списками других объектов - оба списка, содержащие объекты того же типа. Это выглядит примерно так:Hibernate: несколько ассоциаций с тем же классом
@Entity
public class Course {
private List<Test> preTests;
@OneToMany(cascade= javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = “course”)
@OrderBy("testNumber")
public List<Test> getPreTests() {
return preTests;
}
public void setPreTests(List<Test> preTests) {
this. preTests = preTests;
}
private List<Test> postTests;
@OneToMany(cascade= javax.persistence.CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = “course”)
@OrderBy("testNumber")
public List<Test> getPostTests() {
return postTests;
}
public void setPostTests(List<Test> postTests) {
this. postTests = postTests;
}
}
Теперь я даже не потрудился, чтобы попробовать этот само по себе потому, что кажется очевидным, что Hibernate не будет иметь никакого способа отличить которые Tests
идти в preTests
и который в postTests
. Исправьте меня, если я ошибаюсь, но единственной информацией, с которой он должен работать, являются внешние ключи в таблице Test
, указывающие на запись Course
, и как предварительные, так и послетестовые тесты указывают на то же Course
. Моя следующая мысль была создать явные PreTest
и PostTest
подклассов Test
, и имеет один List<PreTest>
и один List<PostTest>
, но это приводит к печально известным «mappedBy ссылаться на неизвестное свойстве целевого объекта: конечно» проблема, которую человек на Hibernate претензии - для причины, которые кажутся мне суетливыми, - это по дизайну и, следовательно, вряд ли исчезнет.
Моя текущая мысль состоит в том, чтобы использовать отдельные таблицы соединений для хранения двух ассоциаций. Я не вижу причин, почему это не должно работать. Это также удовлетворяет мое желание оставить все явные SQL (или даже HQL) из определений сущностей и противостоять принуждению, чтобы создать странные составные ключи или иначе написать код, который отражает только причуды моей структуры сохранения, а не мой дизайн объекта.
Тем не менее, прежде чем я посвящу себя этому курсу, я спрашиваю, есть ли у кого-то из вас более чистое решение или какие-то недостатки в моих рассуждениях здесь.
Заранее спасибо.
Майкл
Я дал вам upvote, потому что это, безусловно, разумный ответ, но она попадает под мое желание сохранить фактический SQL/HQL из вещей, поэтому я предпочитаю мое решение, даже за счет дополнительно несколько таблиц и менее эффективные запросы. – Michael