#hibernate #jpa
#спящий режим #jpa
Вопрос:
У меня есть вызываемый базовый класс User
, и я использую стратегию наследования одной таблицы.
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "User_Type")
public class User {
И у меня есть еще один вызываемый класс Artist
, который расширяет User
класс.
@Entity(name = "Artist")
@DiscriminatorValue("Artist")
public class Artist extends User {
Таблицы в базе данных созданы, и у меня есть 2 строки с 2 типами исполнителей.
Вот как я пытаюсь получить исполнителей из базы данных. похоже, что instanceof Artist не работает должным образом, список «художники» остается нулевым.
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
List <User> result = em.createQuery("from User", User.class).getResultList();
em.getTransaction().commit();
em.close();
//get only the artists from the result list
//error here
for (User u: result) {
if (u instanceof Artist) {
artists.add((Artist) u);
}
}
Когда я отлаживаю его, перечислены все столбцы, кроме User_Type
столбца, и я думаю, что это проблема. Как я могу это решить?
ОБНОВИТЬ Проблема заключалась в том, что классы сущностей не были указаны в «persistence.xml » .
Комментарии:
1. Ха, это странно. Была ли схема создана с использованием режима гибернации? Что происходит, когда вы используете
"FROM Artist"
вместо этого? Вы увереныArtist
, что это обнаруживается во время сканирования объектов?2. @crizzis Я исправил проблему… Мне пришлось указать все классы сущностей в persistence.xml .. Теперь это работает.