У меня есть несколько таблиц с именами 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);
}
Очевидно, что это не сработало, поскольку в абстрактной сущности Получатель не было отображено ни одной таблицы.Есть ли способ реализовать то, на что я надеялся, как универсальный метод выборки, вместо того, чтобы создавать репозитории для каждой сущности?