次の階層について考えてみます。ここで、エンティティ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 {
...
でウィジェットを検索する必要がありますserialNumber
が、実行時に検索しているウィジェットの具体的なタイプがわかりません。でウィジェットを検索する正しい方法は何ですか?がの場合serialNumber
、のインスタンスが返されます。 serialNumber
WidgetA
WidgetA
findyBySerialNumber()
DAOでaを使用しようとするとWidget
、抽象クラスをインスタンス化できないというエラーが表示されます。これは理にかなっていますが、永続性プロバイダーは具体的な子エンティティテーブルを調べる方法を知っていると思いました。正しいインスタンスを返します。これをやらせることはできますか?
「SpringDataJPA」を使用しているので、WidgetDAOは非常に単純です。
public interface WidgetDAO extends JpaRepository<Widget, Long> {
public Widget findBySerialNumber(String serialNumber);
}