Рассмотрим следующую иерархию, где сущности WidgetA
и WidgetB
расширяют абстрактный Widget
суперкласс:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Widget implements Serializable {
@Column(name="serialNumber", length=64, nullable=false, unique=true)
private String serialNumber;
...
и
@Entity
public class WidgetA extends Widget implements Serializable {
...
и
@Entity
public class WidgetB extends Widget implements Serializable {
...
Мне нужно искать Widgets на serialNumber
, но я не знаю конкретного типа виджета, который я ищу во время выполнения. Каков правильный способ поиска виджетов с помощью serialNumber
, так что если serialNumber
соответствует WidgetA
, возвращается экземпляр WidgetA
и т.д.?
Я пытаюсь использовать findyBySerialNumber()
в DAO Widget
, и я получаю сообщение об ошибке, указывающее, что я не могу создать экземпляр абстрактного класса, что имеет смысл, но я думал, что поставщик постоянства знает, как просматривать в конкретных таблицах дочерних сущностей и возвращать правильный экземпляр. Могу ли я это сделать?
Я использую "Spring Data JPA", поэтому Widget DAO очень прост:
public interface WidgetDAO extends JpaRepository<Widget, Long> {
public Widget findBySerialNumber(String serialNumber);
}