Присоединенный тип наследования Spring Jpa выберите только базовый класс

У меня проблема с выбором только базового класса, и я не могу найти решение для этого. У меня всегда есть подклассы, а не только базовый класс.

Считайте, что у меня есть базовый класс

@Entity
@Inheritance(strategy = InheritanceType.JOINED)   
public class BaseClass {
  @Id
  @GeneratedValue
  private Long id;
  private Date date;
  // some fields
}

теперь я наследую

@Entity  
public class SubClassA extends BaseClass {
  // some fields
}
interface BaseClassRep extends JpaRepository<BaseClass,Long>{
  @Query(nativeQuery = true, value = "select id,date from baseclass where date = ?1")
  public BaseClass getByDate(Date date)
}

Проблема в том, что BaseClassRep не только возвращает BaseClass, но также SubClassA и все другие подклассы, наследуемые от BaseClass.

Как сказать Hibernate, что мне действительно нужен только базовый класс, а не подклассы.

У меня такая же проблема..

mazend 20.09.2021 06:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 685
2

Ответы 2

вы можете использовать оператор типа. пожалуйста, посмотрите следующую ссылку

Как мне запросить только сущности суперкласса в запросе jpql?

или (Java / JPA | Запрос с указанным унаследованным типом)

select id,date from baseclass b where date = ?1 and b.class = ?2

Он всегда создает странный длинный SQL. Я пробовал 1) расширить JpaRepository и использовать собственный запрос в аннотации @Query 2) работать с EntityManager - тот же результат, даже если я снова попробовал использовать собственный запрос. Поэтому я решил пойти ниже и использовать jdbcTemplate. Таким образом, мой оператор SQL фактически выполняется в формате, который я хотел, и возвращаются только столбцы из базового класса и ничего больше

Yuriy Hladyuk 18.10.2018 14:05

Я думаю, вам нужно использовать тип наследования TABLE_PER_CLASS:

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) , затем вы создаете репозиторий для суперкласса и получаете свои данные.

Другие вопросы по теме