Столбец дискриминатора не применяется в JPA

#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 типами исполнителей.

в базе данных создается столбец quot;User_typequot;

Вот как я пытаюсь получить исполнителей из базы данных. похоже, что 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 .. Теперь это работает.