Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по JPA, Наследование с использованием JPA 
:(
    Опции темы
Grishanya
Дата 19.1.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Добрый день!

В процессе работы с JPA (EclipseLink) возникла проблема, которую пока не удаётся решить:

Имеется два EJB модуля.

В модуле 1 определён некоторый Entity, скажем Animal, который является родительским:
Код

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Animal implements Serializable {...}



В модуле 2 определен наследник от Animal, скажем Cat.
Код

@Entity
public class Cat extends Animal implements Serializable {...}



Сохранение работает.

Теперь необходимо из модуля 1 извлечь экземпляр объекта из таблицы Animal след. образом:
Код

public Animal find(String name) {
  return (Animal) em.createQuery("SELECT an FROM Animal WHERE an.name = :name")
    .setParameter("name", name).getSingleResult();
}



т.е. необходимо работать не с дочерним, а суперклассом.
И вот в этом месте PersistanceProvider выдаёт исключение:
Цитата
Exception Description: Missing class for indicator field value [Cat] of type [class java.lang.String].


Теперь, собственно, вопрос: 
Где ошибка? Почему нельзя работать с суперклассом как с отдельным классом, а PersistanceProvider требует наличия дочернего класса в модуле? (Если Cat перетащить в модуль с Animal, то всё работает)

Заранее спасибо!

Это сообщение отредактировал(а) powerOn - 19.1.2010, 17:37
PM MAIL   Вверх
Joss
Дата 20.1.2010, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 19.3.2006

Репутация: нет
Всего: 1



Я так понимаю, ejb-модули не видят классов друг из друга.
PM MAIL   Вверх
Grishanya
Дата 20.1.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 13.9.2007

Репутация: нет
Всего: нет



Цитата(Joss @ 20.1.2010,  12:26)
Я так понимаю, ejb-модули не видят классов друг из друга.

Модуль 1 (c классом Animal) не видит модуль 2 (с классом Cat).
Наоборот они друг друга видят (т.к. в модуль 2 добавлена баблиотека с jar'кой модуля 1). Иначе невозможно было бы реализовать наследование.
Т.е. если производить поиск из модуля 2, то всё нормально работает, а вот из модуля 1 - нет, т.к. JPA пытается поднять не родительский класс, а потомка. 

А работать необходимо именно с суперклассом.

Это сообщение отредактировал(а) Grishanya - 20.1.2010, 12:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.