У меня проблема с выбором только базового класса, и я не могу найти решение для этого. У меня всегда есть подклассы, а не только базовый класс.
Считайте, что у меня есть базовый класс
@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, что мне действительно нужен только базовый класс, а не подклассы.
У меня такая же проблема..




вы можете использовать оператор типа. пожалуйста, посмотрите следующую ссылку
Как мне запросить только сущности суперкласса в запросе jpql?
или (Java / JPA | Запрос с указанным унаследованным типом)
select id,date from baseclass b where date = ?1 and b.class = ?2
Он всегда создает странный длинный SQL. Я пробовал 1) расширить JpaRepository и использовать собственный запрос в аннотации @Query 2) работать с EntityManager - тот же результат, даже если я снова попробовал использовать собственный запрос. Поэтому я решил пойти ниже и использовать jdbcTemplate. Таким образом, мой оператор SQL фактически выполняется в формате, который я хотел, и возвращаются только столбцы из базового класса и ничего больше
Я думаю, вам нужно использовать тип наследования TABLE_PER_CLASS:
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
, затем вы создаете репозиторий для суперкласса и получаете свои данные.