考虑以下层次结构,其中实体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
,但我不知道我在运行时要搜索的 Widget 的具体类型。搜索小部件的正确方法是什么serialNumber
,如果serialNumber
a 是 a WidgetA
,则返回一个实例WidgetA
,依此类推?
我正在尝试findyBySerialNumber()
在Widget
DAO 中使用 a ,但我收到一个错误消息,告诉我无法实例化抽象类,这是有道理的,但我认为持久性提供程序会知道如何查看具体的子实体表和返回正确的实例。我可以让它这样做吗?
我正在使用“Spring Data JPA”,所以 Widget DAO 非常简单:
public interface WidgetDAO extends JpaRepository<Widget, Long> {
public Widget findBySerialNumber(String serialNumber);
}