Бит контекста: я использую пять таблиц с одинаковой структурой следующим образом:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Book {
@Column(name = "BOOK_ID")
private String bookId;
@Column(name = "CUSTOMER_ID")
private String customerId;
@Column(name = "AUTHOR")
private String author;
@Column(name = "YEAR")
private Integer year;
@Id
@Column(name = "ID")
private Integer id;
}
Тогда все пять таблиц выглядят так:
@Data
@Entity
@Table(name = "FANTASTIC_BOOK")
public class FantasticBook extends Book {
}
Я хотел бы получить правильный bookId относительно таблицы, в которой он находится. 5 таблиц являются обязательными. Мой репозиторий выглядит так:
@Repository
public interface BookRepository extends JpaRepository<Book, Integer> {
List<? extends Book> findByBookId(String bookId);
}
Я думал, что подстановочный знак поможет, сказав Jpa: «Эй, запрос исходит от Fantasti c / Книга ужасов, так что вы должны использовать метод в их соответствующей таблице» , Но это не так. Если я выполню это, результат будет:
[FantasticBook(), FantasticBook(), FantasticBook(), FantasticBook(), FantasticBook(), HorrorBook(), HorrorBook(), HorrorBook(), HorrorBook(), HorrorBook()]
Но мой вызов выглядит так:
MedievalBookList = (List<MedievalBook>) BookRepository.findByBookId(bookId);
Моя интерпретация здесь такова, что у меня есть этот "BookId" во всех 5 таблицах проверить данные. Это означает, что с подстановочным знаком он фактически просматривается в каждом дочернем элементе Book.class, чего я не хочу. Есть ли способ обойти это?
Кроме того, у меня было решение сделать репо следующим образом:
@Repository
public interface BookRepository extends JpaRepository<Book, Integer> {
List<MedivalBook> findByBookId(String bookId);
}
Но если я сделаю это, я не смогу выполнить 5 одинаковых запросов.
У кого-нибудь из вас есть решение?