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> {
}