以泛型作为实体类型的java Spring数据存储库
我想在我的项目中使用Spring数据JPA存储库。比如说,通常我会创建自己的存储库
interface ProductRepository extends JPARepository<Product, Long>
然而,我想提供一个更复杂的案例,符合以下条件:
我有一个共同定义的基本实体:
@MappedSuperclass public abstract class AbstractBaseEntity { @GeneratedValue(strategy = GenerationType.AUTO) @Id @Column(name = "ID", nullable = false) private Long id; ... }
我有所有其他实体扩展上述实体,例如:
@Entity @Table(name = "bread") public class Bread extends AbstractBaseEntity { @Column String type; ... }
及
@Entity @Table(name = "butter") public class Butter extends AbstractBaseEntity { @Column String weight; ... }
- 我希望任何人创建的任何存储库都只与扩展AbstractBaseEntity的实体一起工作。所以我想这样做:
public interface MyBaseRepository<T> extends JpaRepository<T extends AbstractBaseEntity, Long>
然后定义两种常用方法,然后按如下方式使用:
public interface BreadRepository <Bread, Long> extends MyBaseRepository
或者
public interface ButterRepository extends MyBaseRepository
问题是我不能这么做。 当我定义MyBaseRepository时,如果我使用:
MyBaseRepository<T extends AbstractBaseEntity> extends JpaRepository<T, Long>
我在运行real query时出现了一个错误,即“实体没有属性类型”。 如果我用
extends JpaRepository
我得到一个错误,对象没有映射。 如果我尝试
JpaRepository<T extends AbstractBaseEntity , Long>
它只是由于意外的绑定错误而失败
我是否错过了任何东西,或是Spring Data JPA无法实现
谢谢
共 (0) 个答案