Spring data JPA: как использовать абстрактную сущность - PullRequest
0 голосов
/ 19 марта 2019

У меня есть несколько таблиц с именами MEMBER, PROVIDER, EMPLOYER и т. Д., И у них есть несколько общих столбцов, таких как ID, ADDRESS и т. Д. Я использую hibernate для извлечения данных из этих таблиц с помощью Spring Data JPA.Поскольку у меня много похожих таблиц, я создал супер-сущностный класс и написал общий метод для выборки данных.Вот мой суперкласс.

    @Entity
    @Getter
    @Setter
    @NoArgsConstructor
    @ToString
    public abstract class Recipient implements Serializable {

      @Id
      @Column(name = "RECIPIENT_ID", unique = true, nullable = false)
      private Long id;
}

Вот пример сущности, расширяющей этот суперкласс.

@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
@Table(name = "MEMBER")
public class Member extends Recipient {

  @Column(name = "Member_NAME")
  private String membername;

}

Вот Сервис

public class RecipientServiceImpl extends AbstractService<Recipient>
    implements RecipientService {
@Override
  public Recipient findByIdAndType(long id, String type) {
    Recipient recipient = null;
    switch (RecipientType.get(type)) {
      case MEMBER:
        recipient = recipientRepository.findMemberById(id);
      case PROVIDER:
        recipient = recipientRepository.findProviderById(id);
      case EMPLOYER:
        recipient = recipientRepository.findEmployerById(id);

    }
}

А здесьэто хранилище

 public interface RecipientRepository
        extends JpaRepository<Recipient, Long>, JpaSpecificationExecutor<Recipient> {

        public Member findMemberById(long id);
        public Provider findProviderById(long id);
        public Employer findEmployerById(long id);
    }

Очевидно, что это не сработало, поскольку в абстрактной сущности Получатель не было отображено ни одной таблицы.Есть ли способ реализовать то, на что я надеялся, как универсальный метод выборки, вместо того, чтобы создавать репозитории для каждой сущности?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...