WrongClassException переключение с eclipselink на Hibernate - PullRequest
1 голос
/ 14 апреля 2011

У меня был рабочий код, написанный на чистом JPA и работающий на Glassfish v3.0.1 (eclipselink). Я решил переключить поставщика сохраняемости на hbernate 3.5.1-final, и у меня возникают исключения в одном запросе, который работал раньше.
Все остальные запросы (именованные запросы) работают нормально.Может кто-нибудь сказать мне, что не так с приведенным ниже?Я не могу сделать это именованным запросом, потому что мне нужно отсортировать работу по другим параметрам.
Почему коллекции внутри класса Job не запрашиваются?
Спасибо за любую помощь

javax.persistence.PersistenceException: org.hibernate.WrongClassException: Объект с id: 16 не принадлежит указанному подклассу: mypackage.Job (Discriminator:)

Hibernate:

выберите job0_.id как id7_, job0_.version как version7_, job0_.create как созданный ed7_, job0_.error_msg как error5_7_, job0_.priority как priority7_, job0_.retries как retries7_, job0_.status как status7_, job0_.subject как subject7_, job0_.user_id как user10_7_, job0_.DTYPE как DTYPE7_ из test_job job0_ где job0_.user_id =?упорядочить по job0_.created предел DESC?

List foo;

   String qst = " SELECT e from Job e WHERE e.user = :user ";

   qst += " ORDER BY e." + orderBy;
   Query q = em.createQuery(qst); //TypedQuery +List
   q.setParameter("user", user);

   q.setMaxResults(length);
   q.setFirstResult(start);
   foo = q.getResultList();

Классы:

@Entity
@Table
@NamedQueries{}
Job extends BaseEntity{
...
@ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "job_address",
            joinColumns = @JoinColumn(name = "job_id"),
            inverseJoinColumns = @JoinColumn(name = "address_id"))
    @NotNull
    protected Set FtpAddress> addresses;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(name = "job_transmission",
            joinColumns = @JoinColumn(name = "job_id"),
            inverseJoinColumns = @JoinColumn(name = "transmission_id"))
    protected Set Transmission> transmissions; 
}

@MappedSuperclass BaseEntity{
    int id
    int version ....
}

1 Ответ

0 голосов
/ 14 апреля 2011

Что-то совершенно не так: запрос: "SELECT e from Job e WHERE e.user = :user " попытался бы получить доступ к полю «пользователь» класса Job, но у этого класса нет такого поля!

...