Использовать абстрактный суперкласс в качестве параметра для хранилища данных Spring
Я знаю реализацию репозитория данных Spring:
Создайте такой интерфейс:
public interface CountryRepository extends CrudRepository<Country, Long> {}
СейчасCountry
являетсяAbstractCatalog
и у меня есть (намного) больше каталогов в моем проекте.
Мне интересно, могу ли я сделать 1 репозиторий, который должен работать для всех каталогов:
public interface AbstractCatalogRepository extends CrudRepository<AbstractCatalog, Long> {}
Теперь с сохранением я не вижу проблемы напрямую, но если я хочу найтиAbstractCatalog
Я уже уверен, что ударю стену, потому что репо не будет знать, из какого объекта он должен выбрать.
@MappedSuperclass
public abstract class AbstractCatalog extends PersistentEntity {
/**
* The Constant serialVersionUID.
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
/**
* The code.
*/
@Column(unique = true, nullable = false, updatable = false)
private String code;
/**
* The description.
*/
@Column(nullable = false)
private String description;
/**
* The in use.
*/
@Column(name = "IN_USE", nullable = false, columnDefinition = "bit default 1")
private Boolean inUse = Boolean.TRUE;
// getters and setters
}
Country.class@Entity
@Table(name = "tc_country")
@AttributeOverrides({
@AttributeOverride(name = "id", column =
@Column(name = "COUNTRY_SID")),
@AttributeOverride(name = "code", column =
@Column(name = "COUNTRY_CODE")),
@AttributeOverride(name = "description", column =
@Column(name = "COUNTRY_DESCRIPTION"))})
public class Country extends AbstractCatalog {
public static final int MAX_CODE_LENGTH = 11;
@Column(name = "GEONAMEID", nullable = true, unique = false)
private Long geonameid;
// getter and setter
}
Кто-нибудь знает, как я мог бы просто сделать 1 репо для всех реализацийAbstractCatalog
без создания одного и того же интерфейса снова и снова с минимальным изменением имени и класса реализации?