Spring数据jpa继承-每个类的表不工作

Spring数据jpa继承-每个类的表不工作,spring,hibernate,jpa,spring-data-jpa,Spring,Hibernate,Jpa,Spring Data Jpa,我有一个抽象的实体 @Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @EntityListeners(AuditingEntityListener.class) public abstract class AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) protected long id; @C

我有一个抽象的实体

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@EntityListeners(AuditingEntityListener.class)
public abstract class AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected long id;

    @CreatedBy
    protected String createdBy;

    @CreatedDate
    protected Date creationDate;

    @LastModifiedBy
    protected String modifiedBy;

    @LastModifiedDate
    protected Date lastModifiedDate;

}
以及该类的2个具体实现:

A类:

@Entity
@Table(name = "A")
public class A extends AbstractEntity {

    @Column(name = "NAME", nullable = false)
    private String name;

    @Column(name = "PRIORITY", nullable = false)
    private int priority;
}
B类:

@Entity
@Table(name = "B")
public class B extends AbstractEntity {

    @Column(name = "PLACE", nullable = false)
    private String place;

    @Column(name = "DISTANCE", nullable = false)
    private int distance;
}
和一个公共存储库界面:

@NoRepositoryBean
public interface IRepository extends Repository<AbstractEntity, Long> {
    /**
     * Method to query by unique id/PK.
     * @param id
     * @return Entity with id "id"
     */
    @Query("select entity from #{#entityName} as entity where entity.id = ?1")
    public AbstractEntity findById(long id);

    /**
     * Insert method
     * @param abstractEntity
     * @return modified entity after insertion
     */
    public AbstractEntity save(AbstractEntity abstractEntity);

    /**
     * select all records from the table
     * @return list of all entities representing records in the table
     */
    @Query("select entity from #{#entityName} as entity")
    public List<AbstractEntity> findAll();

    /**
     * delete record by id
     * @param id
     */
    public void deleteById(long id);
}
当我在ARepository上调用findAll()时,我会得到ARepository和BRepository中的记录。因为继承类型被指定为TABLE_PER_类,所以我假设findAll()只从该表中拾取记录。我甚至向findAll()方法添加了一个查询,以检测实体类型并适当地选择记录,但这似乎没有起到任何作用。这里有我遗漏的东西吗

我正在使用Hibernate作为我的底层持久性框架,并且正在处理HSQLDB

谢谢


Aarthi

存储库的类型不正确,请将其更改为

@NoRepositoryBean
public interface IRepository<Entity extends AbstractEntity> extends Repository<Entity, Long> {

}

public interface ARepository extends IRepository<A> {

}

public interface BRepository extends IRepository<B> {

}
@NoRepositoryBean
公共接口IRepository扩展了存储库{
}
公共接口ARepository扩展了Ipository{
}
公共接口BRepository扩展了Ipository{
}

您从未想过查看日志,让您的JPA提供商查看调用的JPQL和SQL?
@NoRepositoryBean
public interface IRepository<Entity extends AbstractEntity> extends Repository<Entity, Long> {

}

public interface ARepository extends IRepository<A> {

}

public interface BRepository extends IRepository<B> {

}