Так у меня есть этот код:Hibernate класс литая исключение со списками
public List<FooRequirement> findByFoo(Foo foo) {
return getCurrentSession().createQuery("select distinct fr.foo from FooBarRequirement fr where fr.Foo.id = :FooId")
.setParameter("FooId", foo.getId()).list();
}
Я называю этот код где-то в моем коде с
List<FooRequirement> myList = dao.findByFoo(foo);
Тогда я получил ClassCastException и спрашивает, что я делаю неправильно , Я отлаживал свой код, и я видел, что мой список (myList), который должен содержать ссылки на объекты типа FooRequirement, фактически заполнен ссылками типа Foo.
Тогда я нашел свою ошибку:
return getCurrentSession().createQuery("select distinct fr from FooBarRequirement fr where fr.Foo.id = :FooId"
Был «выберите отчетливый fr.foo», но она должна была «выберите отчетливый фр ...», потому что я хочу список FooRequirements не Foos.
Вопрос в том, как эта ссылка попала в список в первую очередь? Я имею в виду, как возможно, чтобы список удерживал foo?
Некоторые сведения о классах:
Все классы являются юридические лица, то есть таблицы БД для них.
Класс Foo имеет идентификатор поля и описание.
Класс FooRequirement является классом ABSTRACT и имеет ссылку на Foo (ManyToOne) и id. FooRequirement НЕ расширяет Foo.
Класс FooBarRequirement расширяет класс FooRequirement, если он является relavent. У этого есть поле Баз. (ManyToOne)
Я надеюсь, что вопрос ясен. На самом деле ситуация была немного сложнее, но я старался сделать ее максимально простой.
Ну, я не понимаю ваш вопрос. «Я имею в виду, как можно, чтобы List держал foo?» - что вы имеете в виду? Почему «Список» не может содержать 'foo'? –
Это список FooRequirements. И Foo не расширяет FooRequirement. –
Вы уверены, что это не 'List'? От взгляда на ваш код, это то, что должен был сделать Hibernate. И это также не может быть передано в 'List '. –