Spring Data JPA(Hibernate): How do I retrieve a concrete entity using only a field in its abstract superclass?

后端 未结 3 767
闹比i
闹比i 2020-12-31 09:08

Consider the following hierarchy, where entities WidgetA and WidgetB extend an abstract Widget superclass:

@Entity
@In         


        
3条回答
  •  醉话见心
    2020-12-31 09:39

    It seems you didn't specify a discriminator explicitly for your widget hierarchy. I think you can try to define it explicitly because Spring Data will manipulate bytecode to generate the queries, and so I suspect SpringData need to have those values explicitely defined.

    Additionally in subclasses you need to indicate the discriminator value for each subclass.

    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    @DiscriminatorColumn(name="WIDGET_TYPE")
    public abstract class Widget implements Serializable  {
    
        @Column(name="serialNumber", length=64, nullable=false, unique=true)
        private String serialNumber;
        ...
    

    -

    @Entity
    @DiscriminatorValue("A")
    public class WidgetA extends Widget implements Serializable  {
    ...
    

    -

    @Entity
    @DiscriminatorValue("B")
    public class WidgetB extends Widget implements Serializable  {
    ...
    

提交回复
热议问题